HDU4288 Coder
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #define lson l,mid,i<<1 6 #define rson mid+1,r,i<<1|1 7 using namespace std; 8 const int Ni =100010; 9 int num[Ni],x[Ni]; 10 char op[Ni]; 11 int tn[Ni*3]; 12 long long tree[Ni*3][5]; 13 void pushup(int k) 14 { 15 int t=tn[k<<1]; 16 for(int i=0;i<5;i++) tree[k][i]=tree[k<<1][i]; 17 for(int i=0;i<5;i++) tree[k][(i+t)%5]+=tree[k<<1|1][i]; 18 tn[k]=tn[k<<1]+tn[k<<1|1]; 19 } 20 void update(int q,int l,int r,int i) 21 { 22 if(l==r) 23 { 24 tn[i]^=1; 25 tree[i][0]=tn[i]? q:0; 26 return ; 27 } 28 int mid=(l+r)>>1; 29 if(q<=x[mid]) update(q,lson); 30 else update(q,rson); 31 pushup(i); 32 } 33 int main() 34 { 35 int a,i,j,cnt,n; 36 char str[5]; 37 while(~scanf("%d",&n)) 38 { 39 cnt=0; 40 memset(tn,0,sizeof(tn)); 41 memset(tree,0,sizeof(tree)); 42 for(i=0;i<n;i++) 43 { 44 scanf("%s",str); 45 op[i]=str[0]; 46 if(str[0]!='s') 47 { 48 scanf("%d",&a); 49 num[i]=x[cnt++]=a; 50 } 51 } 52 sort(x,x+cnt); 53 for(j=0,i=1;i<cnt;i++) if(x[j]!=x[i]) x[++j]=x[i]; 54 cnt=j; 55 for(i=0;i<n;i++) 56 { 57 if(op[i]=='s') printf("%I64d\n",tree[1][2]); 58 else update(num[i],0,cnt,1); 59 } 60 } 61 return 0; 62 }