单调栈是栈中数据具有单调性的一种数据结构,用来求以某个值为最值的最大区间等问题
模板(c++):
int n,in;
int stack[1010];
int top;
func(){
for(int i=0;i<n;i++){
scanf("%d",&in);
while(top>0&&in>=stack[top])top--;//>=就是从栈底到栈顶单增
/*加入自己需要的功能*/
stack[top++]=in;
}
}
单调队列
也许是单调栈puls?
从队首到队尾的数据是单调的,解决区间内最值问题等问题
模板(c++):
#include<iostream>
#include<deque>
using namespace std;
deque<int>que;//该模板的que只储存下标,要根据需要修改
int n,m;
int in[2000005];
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&in[i]);
}
for (int j = 1; j <= m; j++) {
while (que.size() > 0 && que.front() <= j - k) {//更新区间
que.pop_front();
}
while (que.size() > 0 && in[i][que.back()] < in[i][j]) {//控制队列的单调性
que.pop_back();
}
que.push_back(j);//将当前下标加入队列
/*加入功能*/
return 0;
}
我觉得我大学学习的一个误区可能就是太把自己当回事了
其实那些深奥的知识在学习的时候没有必要要研究透原理,只要会用就行,先跟答案抄两遍,会写就行。
原理什么的,等会写以后再悟会简单很多。
标签:队列,top,back,int,que,单调 From: https://www.cnblogs.com/bvwvd/p/16969290.html2022.12.5 in HHUC