来源:HDU4699
就是一个模拟一个类似于栈的数据结构的题目。。。维护最大值。。。参考了题解。。。
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1000006;
int dp[maxn], sum[maxn], m, x;
const int inf = 1e9+6;
char op[3];
int s1[maxn], s2[maxn], t1, t2; //写双栈来进行模拟。。。
int main() {
while( ~scanf("%d", &m)) {
dp[0] = -inf;
t1 = t2 = 0;
while(m--) {
scanf("%s", op);
if(op[0] == 'I') {
scanf("%d", &x);
l[++t1] = x;
sum[t1] = sum[t1-1] + x;
dp[t1] = max(dp[t1-1], sum[t1]); //动态规划思想
}
else if(op[0] == 'L') {
if(!t1) continue;
s2[++t2] = s1[t1--];
}
else if(op[0] == 'R') {
if(!t2) continue;
s1[++t1] = s2[t2--];
sum[t1] = sum[t1-1] + l[t1];
dp[t1] = max(dp[t1-1], sum[t1]);
}
else if(op[0] == 'D') t1--;
else {
scanf("%d", &x);
printf("%d\n", dp[x]);
}
}
}
return 0;
}