P8600&CF526F(雙倍經驗)

wuhupai發表於2024-07-19

看P8600題面比較易懂
這種問區間的題目,一般都是列舉右端點,找有多少個符合條件的左端點。然後容易發現一個性質,如果一個區間最大數的下標減區間最小數的下標+1等於區間長度,那麼這個區間就是一個連號。所以我們可以動態維護\(max(a_{l},...,a_{r})-min(a_{l},...,a_{r})+1=len\)
\(max(a_{l},...,a_{r})-min(a_{l},...,a_{r})+1-len=0\)
利用掃描線,發現每個左端點都對應一個值,那麼我們可以利用線段樹維護len了。但怎麼維護\(max(a_{l},...,a_{r})-max(a_{l},...,a_{r})\)聰明的小朋友已經開始吉司機了,但這題可以利用單調棧來解決。因為區間的max單調不增,min單調不減,所以在做單調棧的同時用線段樹區間加減即可。

相關文章