代码:
#include<stdio.h>
#include<string.h>
#define lson (rt<<1)
#define rson (rt<<1|1)
#define MOD 1000000007
#include<algorithm>
using namespace std;
const int maxn = 100010;
struct node{
int cnt;
long long sum[5];
int l;
int r;
}tree[maxn << 2];
int k , n , num[100010];
int tot;
char temp[100010][10];
int q[100010];
void pushUp(int rt){
for(int i = 0 ; i < 5 ; i ++){
tree[rt].sum[i] = (long long)tree[lson].sum[i] + tree[rson].sum[((i - tree[lson].cnt) % 5 + 5) % 5];
}
}
void build(int l , int r , int rt){
tree[rt].cnt = 0;
tree[rt].l = l;
tree[rt].r = r;
memset(tree[rt].sum , 0 , sizeof(tree[rt].sum));
int m = (l + r) / 2;
if(l == r) return;
build(l , m , lson);
build(m + 1 , r , rson);
return ;
}
void update(int p , int val , int rt){
tree[rt].cnt += 2 * k - 1;
if(tree[rt].r == tree[rt].l){
tree[rt].sum[0] = k * val;
return;
}
int m = (tree[rt].r + tree[rt].l) / 2;
if(p <= m) update(p , val , lson);
else update(p , val , rson);
pushUp(rt);
}
int main(){
while(~scanf("%d" , &n)){
tot = 0;
for(int i = 0 ; i < n ; i ++){
scanf("%s" , temp[i]);
if(temp[i][0] != 's'){
scanf("%d" , &q[i]);
num[tot ++] = q[i];
}
}
sort(num , num + tot);
tot = unique(num , num + tot) - num;
build(1,tot,1);
for(int i = 0 ; i < n ; i ++){
int pos = lower_bound(num , num + tot , q[i]) - num;
if(temp[i][0] == 'a') {
k = 1;
update(pos , q[i] , 1);
}
else if(temp[i][0] == 'd'){
k = 0;
update(pos , q[i] , 1);
}
else{
printf("%I64d\n" , tree[1].sum[2]);
}
}
}
return 0;
}