一類基於單調性的題目
阿新 • • 發佈:2018-09-29
單調性 端點 每一個 分析 不存在 分答 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..
吃完飯再更
一類基於單調性的題目