
数据结构 ------ 单调队列/单调栈
文章平均质量分 64
orz11111111
这个作者很懒,什么都没留下…
展开
-
BZOJ 1012 最大数maxnumber 单调队列
题意;初始序列为空,Q次操作.Q,Dop1:询问末尾Li个数的最大值 op2:向末尾插入x+上一次的查询的答案%D.(在线)若一个数右边有比它大的数,则查询末尾最值时可以将该数淘汰.单调栈维护第i大的位置.每次二分找到第一个大于n-L+1的位置即可.次二分找到第一个大于n-L+1的位置即可.#include using namespace std;typedef long原创 2017-08-22 23:05:13 · 337 阅读 · 0 评论 -
CF 373D Counting Rectangles is Fun 单调栈+DP
题意:n*m的01矩阵,q次询问,每次询问左上角为(a,b),右下角为(c,d)的矩形中 有多少个全0的子矩形?n,mn,m类似二维前缀和 dp[a][b][c][d]=dp[a][b][c-1][d]+dp[a][b][c][d-1]-dp[a][b][c-1][d-1]+fun(a,b,c,d)calc计算(c,d)为右下角,左上不超出(a,b)时,有多少个全0子矩形原创 2017-09-27 14:17:54 · 334 阅读 · 0 评论 -
CF 548 D. Mike and Feet 单调栈(从大到小维护)
题意:给出序列a,定义f(l,r)为min(a[l],a[l+1]..a[r]) n用单调栈预处理出每个a[i]作为最小值时 能延伸到的左右端点[L,R].然后要更新ans[1...R-L+1]为max(ans[1..R-L+1],a[i]) 暴力点用线段树区间set操作,想想都麻烦,看到ans是非递增的 然后每次更新都又是前缀在预处理完序列a以后 将序列a用优先队列从原创 2017-10-11 18:55:50 · 217 阅读 · 0 评论 -
CF 900.C Remove Extra One 单调栈+BIT
题意:[1..n]的排列a. 定义a[i]合法:当所有j (1n定义f[i]为删除第i个数 能让答案的贡献增大多少,c[i]为第i个元素左边比它大的个数先用单调栈处理出每个元素左边第一个比它的大元素.当c[i]等于1 删除第i个元素左边第一个比它大的元素j 答案才有可能增加 让f[j]++,求出最大的f[j]即可.#include using namespace st原创 2017-12-12 09:31:08 · 559 阅读 · 0 评论 -
51nod 40 选择子序列 单调栈+DP
题意:长度为n的序列a.每个数都不相同. 找到一个序列b 0 A[b[1]]> ...A[b[k]]. 并且:A[j]na[b[i]]要大于(a[b[i]]~a[b[i-1]])之间的数. 选下一个数,可以在上一个数的左右两边 而且不知道要选哪一个 不好处理.先保存每个数的下标 然后将序列按照权值从大到小排序.设dp[i]为以排序后下标i结尾 选出最原创 2017-12-30 20:02:54 · 236 阅读 · 0 评论 -
HDU 6319 Ascending Rating 单调队列,(最大值变化次数)
题意:长度为n的序列a.对每个m大小的区间[i,i+m-1],求出该区间的最大值,以及最大值变化的次数.例如区间(4,2,7,5),最大值变化次数为2. n<=1e7.n<=1e7. 标准解应该为O(n). 容易想到用单调队列维护每个区间的最大值.发现正着做单调队列的过程中,单调队列的大小 是从右往左数 最大值的变化次数.例如区间(4,2,7,5,1,3) 单调队列中存的为(...原创 2018-10-26 17:15:10 · 153 阅读 · 0 评论 -
CC April 18 Cutting Plants 单调队列+思维
题意:长度为n的序列A,B.操作:选定一个区间[L,R]将里面的数变为h , h<=min(a[L],a[L+1]...a[R]).n<=1e5,1<=a[i],b[i]<=1e9. 问将序列A变为序列B最少需要多少次操作? 无解输出-1.假设某次操作是将[L,R]内的数变为x.则x要满足 max(b[i]) <= x <= min(a[i]) i...原创 2018-10-26 17:28:23 · 179 阅读 · 0 评论