1. 程式人生 > >一類基於單調性的題目

一類基於單調性的題目

單調性 端點 每一個 分析 不存在 分答 uva 下一步 -s

直接貼題目吧

POJ - 3061

題意:求區間連續和大於等於\(S\)的最小長度

這是一道A了一年有多的題目..(感覺我變老了

樸素做法:枚舉每一個左端點\(l\),找出最近的合法右端點\(r\),\(O(n^2)\)更新答案
無腦做法:直接二分答案,\(O(nlogn)\)

尺取法:從樸素做法中嘗試優化,如果枚舉的\(l\)\(r\)是最近的解,那麽下一步的\(l+1\)\(r‘\)只增不減
\(∵sum[r-1]-sum[l]<S,sum[r-1]-sum[l+1]<S∴r‘≥r\)
由此可以簡單地\(O(n)\)解決

https://paste.ubuntu.com/p/hzXCHWW46h/


luogu - P1638

題意:求恰好包含m種數字的最小區間長度

對於找到某個\(l\)的最小解\([l,r]\)來說,因為[l,r-1]不可能有m種,所以\([l+1,l+1...r-1]\)也不可能有m種,因此l增加時r也單調不降

https://paste.ubuntu.com/p/BWtkvWNffG/


UVA - 11572

題意:求不包含重復數字的最大區間長度

分析方法一個套路,另外這種更新數值的map不要作死用count()

https://paste.ubuntu.com/p/HXxz6c3S8j/


AtCoder - 4142

題意:求\(a[l]⊕a[l+1]⊕...⊕a[r]=a[l]+a[l+1]+...+a[r]\)

的最大區間長度

\(a⊕b=a+b\)當且僅當每一位相加不超過1

那麽就是說每一位上尺取挑交集更新長度即可

合並到單次操作也是r單調不降,因為r+1可能存在更優的解使得某一位填上1,如果不存在也就是r,而r-1因為l的減少是絕對不會成為更優解

https://paste.ubuntu.com/p/DXNK35XPpr/


luogu - P..

吃完飯再更

一類基於單調性的題目