一类基于单调性的题目

Posted caturra

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一类基于单调性的题目相关的知识,希望对你有一定的参考价值。

直接贴题目吧

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..

吃完饭再更




以上是关于一类基于单调性的题目的主要内容,如果未能解决你的问题,请参考以下文章

单调性优化学习笔记

单调栈

决策单调性

抽象函数的单调性证明

单调队列模板

斜率优化DP