【jzoj4778】【数列编辑器】

来源:互联网 发布:韩国布料模拟软件 编辑:程序博客网 时间:2024/05/09 23:16

题目大意

这里写图片描述

解题思路

如果不要询问的话显然双向链表,但是我们发现询问在光标的前面,可以用两个栈分别保存前后,开个数组存答案,移动光标时更新答案即可。

code

#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LF double#define LL long long#define max(a,b) ((a>b)?a:b)#define min(a,b) ((a>b)?b:a)#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)using namespace std;int const maxq=1000000,inf=2147483647;int q,a[maxq+10],s[maxq+10],f[maxq+10],b[maxq+10];int main(){    freopen("d.in","r",stdin);    freopen("d.out","w",stdout);    scanf("%d\n",&q);f[0]=-inf;    fo(i,1,q){        char ch=getchar();        if((ch=='I')||(ch=='Q')){            int x;scanf("%d\n",&x);            if(ch=='I'){                a[++a[0]]=x;                s[a[0]]=s[a[0]-1]+x;                f[a[0]]=max(f[a[0]-1],s[a[0]]);            }else{                printf("%d\n",f[x]);            }        }else{            scanf("\n");            if(ch=='D'){                a[0]--;            }else if(ch=='L'){                if(a[0])b[++b[0]]=a[a[0]--];            }else if(b[0]){                a[++a[0]]=b[b[0]--];                s[a[0]]=s[a[0]-1]+a[a[0]];                f[a[0]]=max(f[a[0]-1],s[a[0]]);            }        }    }    return 0;}
0 0
原创粉丝点击