单调队列
其实是初二就学的,但是当时只是会做几道例题,没有总结规律,现在看入门经典时突然感觉以前学的时候太不仔细了,漏过很多细节,于是来填(wa)个坑。
先抄几道例题(其实例题都属于“滑动窗口”一栏,但其实思想一样,直接被我归纳为单调队列了)
1.Window 不解释
知道单调队列的应该都知道Window。
Window作为一道经典例题,体现了单调队列的基本特征
1.只关心最优解(要求前n个最优解请出门左拐找隔壁优先队列,单调队列的队列里可能只有1个答案)
2.允许在线更新(废话,不然我排个序不就完事了)
3.多快好省(所有没用的都被自动排除,而且均摊下来每次操作时间才常数)
2.Defense Lines,Uva1471
删掉一段连续的子序列,剩下的序列里最长连续递增子序列
先上个暴力
枚举删掉的子序列的头尾O(n2),统计长度O(n)
总复杂度n3
忘记说了,n范围200,000
233
所以怎么降?
首先很明显统计长度的n是不需要的,预处理一下就好了
还有n2
。。。
差点忘了主题单调队列(当然考试的话题目不会告诉你这道题是单调队列,但是看着滑动的一个东西就像)
树上并没有说这是单调队列,但我觉得这实际上还是换汤不换药,把各方面表现都很辣鸡(不但没有别人好还比别人死得早)的结果舍去,最后树上说复杂度为nlgn(为什么感觉像n,是不是哪漏算了)