栈
栈中的数据元素遵守先进后出的原则,栈顶的第一个元素是栈顶元素,只能在栈顶进行插入和删除操作。

出栈入栈顺序相同。
库
stack<int> ......//......为名称
栈的相关概念
- 栈顶可以插入后删除元素,栈顶可以插入元素。
- 压栈:栈的插入操作,也叫作进栈。
- 弹栈:删除栈的操作叫做弹栈。
栈的操作
- 入栈:
push(); - 出栈:
pop(); - 落空栈:
clear(); - 取栈顶元素:
top(); - 栈的大小:
size(); - 清空栈:
empty();
列题
https://www.luogu.org/problem/P2731
#include<bits/stdc++.h>
using namespace std;
int n;
int g[1010][1010];
int a[100000],b[100000];
int ans;
int s=1000000,q=1000000;
void add(int x){
for(int i=1;i<=500;i++){
if(g[x][i]){
g[x][i]--;
g[i][x]--;
add(i);
}
}
b[ans--]=x;
}
int main(){
cin>>n;
ans=n+1;
for(int i=1;i<=n;i++){
int u,v;
cin>>u>>v;
g[u][v]++;
g[v][u]++;
a[u]++;
a[v]++;
s=min(s,min(u,v));
}
for(int i=1;i<=500;i++){
if(a[i]%2==1){
q=min(i,q);
}
if(q<1000000){
add(q);
}else{
add(s);
}
}
for(int i=1;i<=n+1;i++){
cout<<b[i]<<endl;
}
return 0;
}
单调栈
单调栈这个东西和单调队列差不多,只是维护一个栈的单调性,所以,这类提的解法可以参考单调队列。
只是普通的单调栈!——真的!以前只是总结——by rebirth_death
单调栈
定义
单调递增或单调减的栈 ,和比如在OI比赛中的那些比较大或比较小的输的参考
如图,图中写的是我们栈中的元素,假设上图是一个单调栈。
于是,此时的情况就有两种:
- 栈顶元素小鱼即将插入的元素
此时,设这个值为10,因为4<10,把10放在栈顶
如下图,这个图生动形象的表明了…

- 元素小于栈顶元素
设这个值为5,因为5小于6,7。6,7弹出,栈只剩下1,2,5此时为单调栈

总结效果
单调栈可以找出从左到右所遍历的值
单调栈的思路和单调队列的思路真的差不多。
至于如何去求值,可以上网参考(百度有时真的挺好用 )
本文介绍了栈的基本概念,包括其数据元素的先进后出原则,栈顶的操作,以及压栈和弹栈等操作。还讨论了单调栈,一种保持单调性的特殊栈,用于解决特定问题。通过定义和示例解释了单调栈如何判断栈顶元素与新元素的关系,以及在实际题目中的应用。

795

被折叠的 条评论
为什么被折叠?



