本题的关键字before the cursor。
so,用两个数组就行了。比赛的时候TLE了一次。why?,cout真的就这么花时间?
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
#include <deque>
#include <string>
#define LL long long
#define DB double
#define SI(a) scanf("%d",&a)
#define SD(a) scanf("%lf",&a)
#define SS(a) scanf("%s",a)
#define SF scanf
#define PF printf
#define MM(a,b) memset(a,b,sizeof(a))
#define REP(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
#define N 1000009
#define INF 0x3f3f3f3f
#define EPS 1e-8
#define bug puts("bug")
using namespace std;
int sum[N];
int L[N],R[N];
int ans[N];
int l,r;
int q;
char ch[5];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
while(~SI(q))
{
l = r = 1;
int a;
while(q--)
{
SS(ch);
if(ch[0]=='I')
{
SI(a);
L[l++] = a;
if(l==2)
{
ans[1] = sum[1] = L[1];
continue;
}
sum[l-1] = sum[l-2] + L[l-1];
ans[l-1] = max(sum[l-1],ans[l-2]);
}else if(ch[0]=='Q')
{
SI(a);
//cout<<ans[a]<<endl;
PF("%d\n",ans[a]);
}else if(ch[0]=='L'&&l>1)
{
l--;
R[r++] = L[l];
}else if(ch[0]=='R'&&r>1)
{
r--;
L[l++] = R[r];
if(l==2)
{
ans[1] = sum[1] = L[1];
continue;
}
sum[l-1] = sum[l-2] + L[l-1];
ans[l-1] = max(sum[l-1],ans[l-2]);
}else if(ch[0]=='D')
{
if(l>1) l--;
}
// REP(i,1,l) cout<<L[i]<<" ";cout<<" = ";
// REP(j,1,r) cout<<R[j]<<" ";
//cout<<endl;
}
}
return 0;
}