目录:
题目:
分析:
首先,我们要知道,这道题有多组数据..MMP
然后就很简单了,用对顶栈,构建出整个数列。
分五种情况一个个处理就好了
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#define LL long long
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
stack<int> a;
stack<int> b;
int f[1000001],sum[1000001];
int n;
char c;
int main()
{
int w;
while(scanf("%d",&n)>0)
{
scanf("%c",&c);
while(a.size()>0) a.pop();
while(b.size()>0) b.pop();
f[0]=-99999999;
for(int i=1;i<=n;i++)
{
scanf("%c",&c);
if(c=='I')
{
w=read();
a.push(w);
sum[a.size()]=sum[a.size()-1]+w;
f[a.size()]=max(f[a.size()-1],sum[a.size()]);
}
if(c=='D') a.pop(),scanf("%c",&c);
if(c=='L')
{
if(a.size()>0)
{
b.push(a.top());
a.pop();
}
scanf("%c",&c);
}
if(c=='R')
{
scanf("%c",&c);
if(b.size()==0) continue;
a.push(b.top());
b.pop();
sum[a.size()]=sum[a.size()-1]+a.top();
f[a.size()]=max(f[a.size()-1],sum[a.size()]);
}
if(c=='Q')
{
w=read();
printf("%d\n",f[w]);
}
}
}
return 0;
}