func_code_string: #include <bits/stdc++.h>   using namespace std;   int bit[100005], n, dt;   set<int> ms;   vector<int> nums, ops;   void add(int pos, int val) {     while (pos <= (int)nums.size()) {       bit[pos] += val;       pos += (-pos) & pos;     }   }   int sum(int pos) {     int res = 0;     while (pos > 0) {       res += bit[pos];       pos -= (-pos) & pos;     }     return res;   }   struct range {     int l, r, cnt, cov;     long long sum[5];     range(int L, int R) {       l = L;       r = R;       cov = 0;       cnt = 0;       memset(sum, 0, sizeof(sum));     }     range() {       l = r = cnt = cov = 0;       memset(sum, 0, sizeof(sum));     }   };   range operator+(range a, range b) {     range c = a;     c.r = b.r;     c.cnt += b.cnt;     int xb;     for (xb = 0; xb < 5; xb++) c.sum[xb] += b.sum[(xb + 10 - b.cov + a.cov) % 5];     return c;   }   range operator-(range a, range b) {     range c = a;     c.r = b.r;     c.cnt -= b.cnt;     int xb;     for (xb = 0; xb < 5; xb++) c.sum[xb] -= b.sum[(xb + 10 - b.cov + a.cov) % 5];     return c;   }   void proc(range &a, range b, int type) {     int xb;     if (type == 1) {       a = a - b;       a.cnt += b.cnt;       for (xb = 0; xb < 5; xb++)         a.sum[xb] += b.sum[(xb + 15 - b.cov + a.cov - 1) % 5];     } else {       a = a - b;       a.cnt += b.cnt;       for (xb = 0; xb < 5; xb++)         a.sum[xb] += b.sum[(xb + 15 - b.cov + a.cov + 1) % 5];     }   }   struct SegT {     range tree[300005];     void init(int pos, int l, int r) {       tree[pos].l = l;       tree[pos].r = r;       memset(tree[pos].sum, 0, sizeof(tree[pos].sum));       tree[pos].cnt = tree[pos].cov = 0;       if (l != r) {         int m = (l + r) / 2;         init(pos * 2, l, m);         init(pos * 2 + 1, m + 1, r);       }     }     range query(int pos, int l, int r) {       if (l <= tree[pos].l && r >= tree[pos].r) return tree[pos];       int m = (tree[pos].l + tree[pos].r) / 2;       range ret = range(tree[pos].l, 0);       if (l <= m) ret = ret + query(pos * 2, l, r);       if (r > m) ret = ret + query(pos * 2 + 1, l, r);       ret.cov += tree[pos].cov;       ret.r = tree[pos].r;       ret.cov %= 5;       return ret;     }     void addcov(int pos, int l, int r, int v) {       if (l <= tree[pos].l && r >= tree[pos].r) {         tree[pos].cov += v;         tree[pos].cov %= 5;         return;       }       int m = (tree[pos].l + tree[pos].r) / 2;       if (l <= m) addcov(pos * 2, l, r, v);       if (r > m) addcov(pos * 2 + 1, l, r, v);     }     void edit(int pos, int d, int rst, int type, int cov) {       tree[pos].cnt += type;       if (d == tree[pos].r) {         tree[pos].sum[(rst - cov - tree[pos].cov + 10) % 5] += type * nums[d];         if (tree[pos].l != tree[pos].r)           edit(pos * 2 + 1, d, rst, type, (cov + tree[pos].cov) % 5);         return;       }       range res = query(pos, d + 1, tree[pos].r);       tree[pos].sum[(rst - cov - tree[pos].cov + 10) % 5] += type * nums[d];       proc(tree[pos], res, type);       int m = (tree[pos].l + tree[pos].r) / 2;       if (d <= m) {         edit(pos * 2, d, rst, type, (cov + tree[pos].cov) % 5);         addcov(pos * 2 + 1, m + 1, tree[pos].r, type);       } else {         edit(pos * 2 + 1, d, rst, type, (cov + tree[pos].cov) % 5);       }     }   } T;   int Bsearch(int key) {     int left = 1, right = (int)nums.size(), mid;     while (left < right) {       mid = (left + right) / 2;       if (nums[mid] < key)         left = mid + 1;       else         right = mid;     }     return left;   }   char inp[100005][10];   int main() {     ms.clear();     int xb, x2, op;     scanf( %d , &n);     if (n == 1) {       scanf( %s , inp[0]);       if (inp[0][0] ==  s ) printf( 0 );       return 0;     }     for (xb = 0; xb < n; xb++) {       scanf( %s , inp[xb]);       if (inp[xb][0] ==  a ) {         scanf( %d , &op);         ops.push_back(op);         ms.insert(op);       } else if (inp[xb][0] ==  d ) {         scanf( %d , &op);         ops.push_back(op);       } else         ops.push_back(-1);     }     set<int>::iterator it;     nums.push_back(-1);     for (it = ms.begin(); it != ms.end(); it++) {       nums.push_back(*it);     }     T.init(1, 1, nums.size() - 1);     for (xb = 0; xb < n; xb++) {       if (inp[xb][0] ==  a ) {         int d = Bsearch(ops[xb]), rst = sum(d - 1);         add(d, 1);         T.edit(1, d, rst, 1, 0);       } else if (inp[xb][0] ==  d ) {         int d = Bsearch(ops[xb]), rst = sum(d - 1);         add(d, -1);         T.edit(1, d, rst, -1, 0);       } else {         range res = T.query(1, 1, nums.size() - 1);         printf( %I64d n , res.sum[(7 - res.cov) % 5]);       }     }     return 0;   }   