1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 1000010; 4 int stkl[N], stkr[N]; //左边这个栈。右边这个栈 5 int tl, tr; //左边这个栈的栈顶。右边这个栈的栈顶 6 int s[N], f[N]; //左边这个栈的前缀和。前i个前缀和的最大值 7 void push_left(int x) { //往左边插入一个数 8 stkl[++tl] = x; 9 s[tl] = s[tl - 1] + x; 10 f[tl] = max(f[tl - 1], s[tl]); 11 } 12 13 int main() { 14 ios::sync_with_stdio(false); 15 cin.tie(0); 16 cout.tie(0); 17 int n; 18 cin >> n; 19 f[0] = -2000000000; 20 while (n--) { 21 string op; 22 int k; 23 cin >> op; 24 if (op == "I") { 25 cin >> k; 26 push_left(k); 27 } else if (op == "D") { 28 if (tl > 0) { 29 tl--; 30 } 31 } else if (op == "L") { 32 if (tl > 0) { 33 stkr[++tr] = stkl[tl]; 34 tl--; 35 } 36 } else if (op == "R") { 37 if (tr > 0) { 38 push_left(stkr[tr]); 39 tr--; 40 } 41 } else { 42 cin >> k; 43 cout << f[k] << endl; 44 } 45 } 46 return 0; 47 }