标签:
9 add 1 add 2 add 3 add 4 add 5 sum add 6 del 3 sum 6 add 1 add 3 add 5 add 7 add 9 sum
3 4 5
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int maxn = 100010; 5 struct node{ 6 int lt,rt,cnt; 7 LL sum[5]; 8 }tree[maxn<<2]; 9 void build(int lt,int rt,int v){ 10 tree[v].lt = lt; 11 tree[v].rt = rt; 12 tree[v].cnt = 0; 13 memset(tree[v].sum,0,sizeof tree[v].sum); 14 if(lt == rt) return; 15 int mid = (lt + rt)>>1; 16 build(lt,mid,v<<1); 17 build(mid+1,rt,v<<1|1); 18 } 19 void pushup(int v){ 20 for(int i = 0; i < 5; ++i){ 21 int tmp = ((i - tree[v<<1].cnt%5)%5 + 5)%5; 22 tree[v].sum[i] = tree[v<<1].sum[i] + tree[v<<1|1].sum[tmp]; 23 } 24 } 25 void update(int p,int val,int delta,int v){ 26 tree[v].cnt += delta; 27 if(tree[v].lt == tree[v].rt){ 28 tree[v].sum[0] += (LL)delta*val; 29 return; 30 } 31 int mid = (tree[v].lt + tree[v].rt)>>1; 32 if(p <= mid) update(p,val,delta,v<<1); 33 else update(p,val,delta,v<<1|1); 34 pushup(v); 35 } 36 int Li[maxn],q[maxn],tot,n; 37 char str[maxn][10]; 38 int main(){ 39 while(~scanf("%d",&n)){ 40 for(int i = tot = 0; i < n; ++i){ 41 scanf("%s",str[i]); 42 if(str[i][0] != ‘s‘){ 43 scanf("%d",q+i); 44 Li[tot++] = q[i]; 45 } 46 } 47 sort(Li,Li+tot); 48 tot = unique(Li,Li+tot) - Li; 49 build(1,tot,1); 50 for(int i = 0; i < n; ++i){ 51 int p = lower_bound(Li,Li + tot,q[i]) - Li; 52 if(str[i][0] == ‘a‘) update(p + 1,q[i],1,1); 53 else if(str[i][0] == ‘d‘) update(p + 1,q[i],-1,1); 54 else printf("%I64d\n",tree[1].sum[2]); 55 } 56 } 57 return 0; 58 }
标签:
原文地址:http://www.cnblogs.com/crackpotisback/p/4815567.html