单调队列
x_1023
这个作者很懒,什么都没留下…
展开
-
BZOJ 4385 Wilcze doły - 单调队列
看到这个数据规模,大概只能是O(n)了,选择一段忽略,很明显应该是选择一段内的最大值,考虑到单调队列。 这道题需要用到双指针的思想。通过left和right两个指针固定一段数,其中被覆盖的肯定是最大的一段m,通过单调队列维护覆盖掉那一段的最大值。每次right右移需要保证left要取到最大,于是加上right节点后判断 区间和 - 单调队列维护的最大值 是否大于p,若超出p左移left指原创 2017-09-25 21:29:00 · 246 阅读 · 0 评论 -
BZOJ 1012 [JSOI2008]最大数maxnumber - 单调队列/单调栈
看了hzw学长的博客才发现自己这么多年一直把单调栈误作单调队列/摔单调栈很好写啊,大概就是维护一个单调递减的栈,且元素id单调递增,每次二分查pos即可。单调栈除了直接维护的值外,一般还有一个单调递增的id的值,且id越大越有优的趋势。#include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<al原创 2017-10-22 22:01:53 · 175 阅读 · 0 评论 -
BZOJ 1047 [HAOI2007]理想的正方形 - 单调队列
拆成二维搞一搞就好了撒,还是蛮好想的。先对于row来一波滑动窗口,记录每个节点在n范围内的最值,然后colomn再搞一遍,求个最值一减ans就出来了(注意colomn搞的时候,>=n才记为有效值,反例是左上角的(1,1)相减答案肯定为0)#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<a原创 2017-10-22 23:06:41 · 214 阅读 · 0 评论 -
BZOJ 1999 [Noip2007]树网的核(2282 [Sdoi2011]消防) - 树的直径+单调队列
首先贴出一篇我认为讲的最好的: http://blog.csdn.net/vmurder/article/details/44627469首先证明结论: 证明一:树的核必在直径上 1.选定的核与直径无交集 显然选的核在直径的一个分支上,如图,肯定不如核与直径相接的那段直径优 2.选定的核与直径有一部分交集 如图若选红色部分为核,那么不在直径的一部分相当于优化了BC段的长度,然而如原创 2017-10-29 23:59:28 · 326 阅读 · 0 评论