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 }

 

你可能感兴趣的:(code)