
单调栈与单调队列
FSYo
我不去想是否能够成功,
既然选择了远方,
便只顾风雨兼程
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
单调栈与单调队列
单调栈 可以方便(O(n))地求出一个数,左右第一个比它大/小的数的位置 如何求---- 给一个序列 2,3,6,9,4,7,1 我们先求左边第一个比它小的 栈为空,a[S.top()]<a[1] 所以 l[1]=0,S.push(1) 单调栈里存的是编号 接下来a[S.top()]<a[2] 所以l[2]=S.top=1, S.push(1) 同理 但是到4的时候...原创 2018-08-19 17:48:50 · 262 阅读 · 0 评论 -
City Game[单调栈]
传送门 记录可以最高到哪里 , 左右到哪里 , 然后更新答案 #include<cstdio> #include<stack> #include<cstring> #define N 1050 using namespace std; int k,h[N],l[N],r[N],n,m,ans; void Calc(){ stack<int> ...原创 2018-11-25 17:11:04 · 299 阅读 · 0 评论 -
花盆[二分答案+单调队列]
传送门 题意: 求最小的l , r 使区间极差大于d 二分出一个长度 , 单调队列维护一个最大,一个最小 #include<bits/stdc++.h> #define N 1000050 using namespace std; struct Node{int x,y;}a[N]; int q1[N],q2[N],n,d; bool cmp(Node a,Node b){re...原创 2018-11-25 15:02:12 · 290 阅读 · 0 评论 -
滑动窗口[单调队列]
传送门 单调队列维护最小最大就可以了 #include<bits/stdc++.h> #define N 1000050 using namespace std; int Max[N],Min[N],ans1[N],ans2[N]; int n,k,l1=1,l2=1,r1,r2,x[N]; int main(){ scanf("%d%d",&n,&k); f...原创 2018-11-28 20:14:50 · 221 阅读 · 0 评论 -
P2659 美丽的序列 [单调栈]
传送门 水题 #include<bits/stdc++.h> #define N 2000050 #define LL long long using namespace std; int n,a[N],l[N],r[N],sta[N],top; LL ans; int read(){ int cnt=0;char ch=0; while(!isdigit(ch))ch=ge...原创 2018-12-12 20:57:39 · 319 阅读 · 0 评论