随笔分类 -  单调栈/单调队列

摘要:在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例如,对于直线:L1:y=x; L2:y=-x; L3:y=0则L1和L2是可见的,L3是被覆盖的.给出n条直线,表示成y=Ax+B的形式(|A|,|B| 阅读全文
posted @ 2018-04-13 21:49 walfy 阅读(163) 评论(0) 推荐(0)
摘要:这个裸题,滑动窗口求最大最小值,单调队列来两边,一次单调递增q[s]就是最小值,一次单调递减q[s]就是最大值 cin会超时,解除同步也没用。。。 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> 阅读全文
posted @ 2017-07-12 23:08 walfy 阅读(152) 评论(0) 推荐(0)
摘要:给一系列并排的矩形,宽都是1,长不同,求最大的矩形(可被上述矩形覆盖)的面积 单调栈,栈中元素为每个值所在的位置,记录下从每个值大于当前值所能到达最远的左边和右边的距离,此时中间的值一定是最小,然后H*(R-L)即当前点所能覆盖的最大面积 #include<map> #include<set> #i 阅读全文
posted @ 2017-07-12 21:16 walfy 阅读(432) 评论(0) 推荐(0)
摘要:有一个数列,对于每一个数,求比它小的在他右边距离他最远的那个数和他的距离 用单调队列做,维护单调队列时可采用如下方法,对于每一个数,如果队列中没有数,则加入队列,如果队列头的数比当前数大,则舍弃该数 对于此题,可用两个队列来维护,一个保存值,一个保持位置,每次查询对值进行二分,然后到对应保持位置的队 阅读全文
posted @ 2017-07-12 21:09 walfy 阅读(292) 评论(0) 推荐(0)
摘要:很基础的单调队列 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #include<ioma 阅读全文
posted @ 2017-07-11 19:33 walfy 阅读(195) 评论(0) 推荐(0)