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