#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int p[2], a[N], b[N], sum[N], f[N];
void A_push(int x)
{
a[++ p[0]] = x;
}
void B_push(int x)
{
b[++ p[1]] = x;
}
void A_pop()
{
if(p[0] > 0)
p[0] --;
}
void B_pop()
{
if(p[1] > 0)
p[1] --;
}
int main()
{
int n;
cin >> n;
while(n --)
{
char c;
cin >> c;
if(c == 'I')
{
int x;
cin >> x;
A_push(x);
sum[p[0]] = sum[p[0]-1] + a[p[0]]; //维护前缀和
f[p[0]] = max(sum[p[0]], f[p[0]-1]);//存栈顶之前最大前缀和
}
else if(c == 'D')
{
A_pop(); //弹出A栈顶
}
else if(c == 'L')
{
B_push(a[p[0]]);
A_pop();//弹出a的栈顶插入到b中
}
else if(c == 'R')
{
A_push(b[p[1]]);
B_pop();//弹出b的栈顶,插入到a中
sum[p[0]] = sum[p[0]-1] + a[p[0]];
f[p[0]] = max(sum[p[0]], f[p[0]-1]);
}
else
{
int k;
cin >> k; //由题意得k是不超过a栈顶的
cout << f[k] << endl;
}
}
return 0;
}
Editor HDU 4699
最新推荐文章于 2024-07-14 19:56:17 发布