hdu 4699 Editor 模拟栈
思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!!
代码如下:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define M 1000001 5 using namespace std; 6 int A[M],B[M],a[M],s[M],cur,x,q,l,r; 7 char c; 8 int main() 9 { 10 while(scanf("%d",&q)!=EOF){ 11 l=r=1; 12 while(q--){ 13 scanf("%s",&c); 14 switch(c) 15 { 16 case 'D': 17 if(l>1) l--; 18 break; 19 case 'I': 20 scanf("%d",&x); 21 A[l++]=x; 22 if(l==2) s[1]=a[1]=x; 23 else{ 24 a[l-1]=a[l-2]+x; 25 s[l-1]=max(s[l-2],a[l-1]); 26 } 27 break; 28 case 'L': 29 if(l>1) B[r++]=A[--l]; 30 break; 31 case 'Q': 32 scanf("%d",&x); 33 printf("%d ",s[x]); 34 break; 35 case 'R': 36 if(r>1){ 37 x=B[--r]; 38 A[l++]=x; 39 if(l==2) a[1]=s[1]=x; 40 else{ 41 a[l-1]=a[l-2]+x; 42 s[l-1]=max(s[l-2],a[l-1]); 43 } 44 } 45 break; 46 } 47 } 48 } 49 return 0; 50 }