对顶栈

对顶栈

【题意】模拟编辑器 算法进阶P50

【题解】对顶栈,(1)对于当前的sum求和的时候下标直接用当前前面的一个栈的size代替就可以;(2)还要注意字符的读入空格会有影响要加getchar;(3)还有stack.pop()之前要注意判断stack是不是空的。

# include <bits/stdc++.h>
using namespace std;

stack<int> a,b;
const int MAXN=1e6+100;
const int INF=1e9;
int sum[MAXN],f[MAXN];
void init()
{
memset(sum,0,sizeof(sum));
memset(f,0,sizeof(f));
f[0]=-INF;
while(!a.empty()) a.pop();
while(!b.empty()) b.pop();
return ;
}
int main()
{
int Q;
while(~scanf("%d",&Q)){
init();
int l;
for(int i=1;i<=Q;i++){
char c;
getchar();
scanf("%c",&c);
if(c=='I'){
int x;
scanf("%d",&x);
a.push(x);
l=a.size();
sum[l]=sum[l-1]+x;
f[l]=max(f[l-1],sum[l]);
}else if(c=='D'){
if(!a.empty()){
a.pop();
}

}else if(c=='L'){
int x;
if(!a.empty()){
x=a.top();
a.pop();  
b.push(x);
}
}else if(c=='R'){
int x;
if(!b.empty()){
x=b.top();
b.pop();
a.push(x);
l=a.size();
sum[l]=sum[l-1]+x;
f[l]=max(f[l-1],sum[l]);
}
}else if(c=='Q'){
int x;
scanf("%d",&x);
printf("%d\n",f[x]);
}
}
}


return 0;
}
/*
8
I 2
I -1
I 1
Q 3
L
D
R
Q 2
*/



posted @   fengzlj  阅读(526)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示