HDU/HDOJ 4699 Editor

对顶栈算法。

此题充分说明了cin的不中以及scanf的优越性。

我TM用cin超时了!!!换成scanf就A了!!!

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 const int N = 1e6 + 5, INF = 0x3f3f3f3f;
 5 inline int max(int a, int b) {
 6     return a > b ? a : b;
 7 }
 8 
 9 struct DZ {
10     int l[N], r[N], sum[N], large[N];
11     int tl, tr;
12     DZ() {
13         memset(l, 0, sizeof(l));
14         memset(r, 0, sizeof(r));
15         tl = tr = sum[0] = 0;
16         large[0] = -INF;
17     }
18     void clear() {
19         tl = tr = 0;
20         return;
21     }
22     void insert(int x) {
23         l[++tl] = x;
24         sum[tl] = sum[tl - 1] + x;
25         large[tl] = max(large[tl - 1], sum[tl]);
26         return;
27     }
28     void del() {
29         tl--;
30         return;
31     }
32     void left() {
33         if(tl) {
34             r[++tr] = l[tl--];
35         }
36         return;
37     }
38     void right() {
39         if(tr) {
40             insert(r[tr--]);
41         }
42         return;
43     }
44     int ask(int k) {
45         return large[k];
46     }
47 }dz;
48 
49 int main() {
50     int Q;
51     while(scanf("%d", &Q) != EOF) {
52         dz.clear();
53         for(int i = 1; i <= Q; i++) {
54             char a[2]; int x;
55             scanf("%s", a);
56             if(a[0] == 'I') {
57                 scanf("%d", &x);
58                 dz.insert(x);
59             }
60             else if(a[0] == 'D') {
61                 dz.del();
62             }
63             else if(a[0] == 'L') {
64                 dz.left();
65             }
66             else if(a[0] == 'R') {
67                 dz.right();
68             }
69             else {
70                 scanf("%d", &x);
71                 printf("%d\n", dz.ask(x));
72             }
73         }
74     }
75     return 0;
76 }
AC代码

 

posted @ 2018-05-15 13:17  garage  阅读(85)  评论(0编辑  收藏  举报