编辑器

 

 

 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 }
原文地址:https://www.cnblogs.com/fx1998/p/14036571.html