
单调栈/队列
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Reboot from Blue
题目链接:Reboot from Blue考虑最短路,每个点只会连左右第一个小于本身的点。然后用单调栈维护即可。AC代码:#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+10,M=N*2;int n,ss,tt,pos,pos1,dp[N],deg[N];pair<int,int> a[N];int head[N],nex[M],to[M],w[M],原创 2021-06-25 12:01:04 · 150 阅读 · 1 评论 -
No Time to Paint S
题目链接:No Time to Paint S显然答案可以分成一个前缀和一个后缀的和。所以我们如果可以预处理前后缀,那么问题就能解决了。假设对前缀考虑:如果当前的字符和前一次出现的位置之间的字符全部大于,那么从上一次的位置涂色过来即可,答案为上一次的次数。否则那么需要1次来涂色。对于求当前位置和上一次之间是否有小于的字符,做单调栈即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc原创 2021-01-29 20:34:14 · 365 阅读 · 0 评论 -
Boring Array
题目链接:Boring Array枚举每个数作为最大值。一定不会错过答案的计算。对于最大值来说,一定是尽量扩展包含当前作为最大值的区间。因为增加数字一定不会使答案变劣。所以正反单调栈求出对应的区间。然后对于区间就相当于判断出现数字的种类数是否和区间长度相同。离线fenwick或者莫队即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int lo原创 2020-12-07 16:54:16 · 251 阅读 · 0 评论 -
[POI2015]WIL-Wilcze doły
题目链接:[POI2015]WIL-Wilcze doły我们可以发现右端点向右移动的时候,左端点也是向右移动的。然后怎么判断当前区间是否合法呢? sum[r] - sum[l-1] - 区间长度为d的max。然后维护区间长度为d 的max,单调队列即可。AC代码:#include<bits/stdc++.h>#define int long longusing namespace std;const int N=2e6+10;int n,p,d,res,a[N],q[N]原创 2020-12-04 19:36:52 · 292 阅读 · 0 评论 -
Codeforces - Discrete Centrifugal Jumps
题目链接:Codeforces - Discrete Centrifugal Jumps第一种条件,直接转移即可。对于第二三种,实际上是一样的。我们考虑每个元素对之前元素的影响,我们可以发现这个是一个单调的东西,然后用单调栈维护转移即可。注意:3 1 2 和 3 2 2这种,第二种3是不能转移的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define in原创 2020-09-09 22:41:25 · 225 阅读 · 0 评论 -
Codeforces - Cashback
题目链接:Codeforces - Cashback很显然如果有两个长度为c的拼接在一起消除,那么为什么不分开呢?所以可以dp,然后单调队列维护区间min即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+10;int n,c,a[N],q[N],hh原创 2020-07-18 10:37:31 · 202 阅读 · 0 评论 -
Codeforces - High Cry
题目链接:Codeforces - High Cry我们直接计算不合法的个数,也就是枚举每个点,当前点作为最大值的合法区间。作为最大值的区间之间正反两次单调栈即可。然后上一个异或>now的位置,我们可以对每一个二进制位递推预处理。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;原创 2020-06-22 23:07:38 · 268 阅读 · 0 评论 -
TEM-Temperature
题目链接:TEM-Temperature显然就是找一个连续区间,使得区间最小R大于等于最大的L。我们维护每一个点作为右端点的答案。然后我们维护一个L单调递减的单调队列即可。计算答案的时候,要注意当前合法的是队列中最左边的点,但是实际上在q[l-1]和q[l]之间的点也是合法的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long lon原创 2020-05-31 12:54:11 · 388 阅读 · 0 评论 -
[POI2014]PTA-Little Bird
题目链接:[POI2014]PTA-Little Bird显然可以dp。dp[i]为点i到n的最小花费,显然dp[n]=0考虑转移:dp[i]=min{dp[j]+(a[j]>=a[i])},当j-i<=k时。显然这个式子具有单调性,但是单调机制并非单独的dp值。我们应该按照dp值单调上升,且dp值一样的时候,h值单调上升。其实是比较显然的。类似于:如果一个选手比你小,还比你强,你就可以退役了AC代码:#pragma GCC optimize("-Ofast","-funr原创 2020-05-26 21:31:29 · 267 阅读 · 0 评论 -
[USACO12OPEN]Bookshelf G
题目链接:[USACO12OPEN]Bookshelf G有一个很显然的式子:dp[i] = min{ dp[j] + max{ a[j+1]->a[i] } }然后尺取可以找到最远的可行的j。直接递推复杂度太高。我们可以发现可以用单调队列维护可行区间,然后用一个multiset维护单调队列里面的最大值即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#d原创 2020-05-26 19:11:57 · 350 阅读 · 0 评论 -
Power收集
题目链接:Power收集显然可以dp。然后比如当前为第x行第y列,那么可以从第x-1行,纵坐标为:[y-t,y+t]当中的最大值转移。显然后面可以单调队列维护。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=4e3+10;int n,m,k,t,q[N],原创 2020-05-18 14:32:04 · 203 阅读 · 0 评论 -
选择数字
题目链接:选择数字显然问题可以等价转化为:删除数字,使得任意两个删除的数字中间不大于k个数的最小代价。所以我们可以dp,dp[i]为前i个数,且第i个数删除的最小代价,显然可以从前k+1个数转移,并且是最小的一个值,所以可以单调队列优化。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int long longusing namespace std;c原创 2020-05-14 10:51:16 · 258 阅读 · 0 评论 -
Patrik 音乐会的等待
题目链接:Patrik 音乐会的等待显然,如果我们从每个人往左计算答案,那么满足的序列一定是具有单调性的。所以我们可以想到用单调栈去维护。但是我们需要处理相同身高的人,所以我们栈里面存一个pair每次先弹出小于的,并且计算答案,然后再判断当前栈里面身高是否相等,然后是否为唯一元素等。注意细节。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int原创 2020-05-13 21:45:58 · 278 阅读 · 0 评论 -
CSL 的字符串
题目链接:CSL 的字符串用一个类似单调栈的栈来维护。只要当前的字符字典序小于栈顶,并且栈顶的元素在后面会出现,那么就一直pop。当然还要保证当前字符未出现。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusi...原创 2020-04-15 10:24:14 · 257 阅读 · 0 评论