1. 程式人生 > 其它 >2022-12-13 #11 萬籟悉數寂靜後 僅剩落空的祈求

2022-12-13 #11 萬籟悉數寂靜後 僅剩落空的祈求

嗚嗚嗚,昨天打 CF 好拉跨。

59 P7220 [JOISC2020] 掃除

做到下面那道題的時候突然想起來忘記記錄這題了。

一個結論是,所有被掃過一次的灰塵,兩兩之間位置關係都是“左上-右下”,而且相對順序不會改變。

如果只有向右掃操作,它就是一個字尾取 max。加上向上掃操作,它事實上會讓後面某些向右掃操作影響的灰塵範圍變小。我們可以用線段樹維護每個向右掃影響哪段字尾,向上掃影響哪段字首。

於是我們需要找到灰塵第一次被掃到的位置,它只限制操作的 \(l\) 在某個區間,這很容易處理。

由於上面的演算法不太能支援插入,我們對插入的過程線段樹分治就好了,複雜度 \(O(q\log^2 q)\)

好像還有一種比較暴力的

做法,我們對直角三角形建出一棵線段樹一樣的結構,(大概每次從中點劈開,劃分成一個大正方形和兩個小直角三角形,遞迴處理三角形)它與動態開點線段樹性質差不多,我們每個結點維護一個數據結構就好了。

60 uoj#712. 【北大集訓2021】簡單資料結構

和上面那題的思想類似。

我們記錄進行了多少次操作 \(2\),那麼操作 \(1\) 就是全域性對一條直線 chkmin。

我們發現,進行了有效的 chkmin 操作的點,操作 \(1\) 的影響範圍會是一段字尾,這顯然可以線段樹二分。

我們只需找到每個數第一次被 chkmin 的時間,這個可以整體二分+李超樹,複雜度 \(O(n\log^2 n)\)

**61 **