func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100005, M = 50005;   const int inf = 0x3f3f3f3f;   const long long INF = 1000000000000000000ll;   const long long mod = 998244353;   const double pi = acos(-1.0);   const double eps = 1e-6;   vector<int> rec;   struct OP {     char str[4];     int num;     void get() {       scanf( %s , str);       if (str[0] ==  a  || str[0] ==  d ) {         scanf( %d , &num);       }     }   } op[N];   struct node {     int l, r, cnt;     long long num[5];     int nt;     void init() {       memset(num, 0, sizeof(num));       cnt = 0;     }     node() {}     node(int l, int r, int nt) {       this->l = l;       this->r = r;       this->nt = nt;     }     void Equal(node tmp) {       for (int i = 0; i < 5; i++) {         num[i] = tmp.num[i];       }       nt = tmp.nt;       cnt = tmp.cnt;     }   };   struct segTree {     node tree[N * 4];     void build(int l, int r, int id) {       tree[id] = node(l, r, 1);       tree[id].init();       if (l == r) return;       int mid = ((l + r) >> 1);       build(l, mid, (id << 1));       build(mid + 1, r, (id << 1 | 1));     }     void pushUp(int id) {       tree[id].Equal(tree[(id << 1)]);       int nt = tree[(id << 1)].nt;       for (int i = 1, j = nt, cnt = 1; cnt <= 5;            i = (i + 1) % 5, j = (j + 1) % 5, cnt++) {         if (tree[(id << 1 | 1)].num[i] == 0) break;         tree[id].num[j] += tree[(id << 1 | 1)].num[i];       }       tree[id].cnt += tree[(id << 1 | 1)].cnt;       tree[id].nt = (tree[id].nt + tree[(id << 1 | 1)].cnt) % 5;     }     void update(int id, int pos, int val) {       int l = tree[id].l, r = tree[id].r;       if (l == r) {         tree[id].num[1] += val;         if (val > 0)           tree[id].nt++, tree[id].cnt++;         else           tree[id].nt--, tree[id].cnt--;         return;       }       int mid = ((l + r) >> 1);       if (pos <= mid)         update((id << 1), pos, val);       else         update((id << 1 | 1), pos, val);       pushUp(id);     }   } segT;   map<int, int> mp;   void discre() {     sort(rec.begin(), rec.end());     int siz = rec.size();     for (int i = 0; i < siz; i++) {       mp.insert(pair<int, int>(rec[i], i));     }   }   int main() {     int n;     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       op[i].get();       if (op[i].str[0] ==  a ) rec.push_back(op[i].num);     }     discre();     if (rec.size() == 0) {       printf( 0 n );       return 0;     }     segT.build(0, rec.size() - 1, 1);     for (int i = 1; i <= n; i++) {       if (op[i].str[0] ==  a ) {         segT.update(1, mp[op[i].num], op[i].num);       } else if (op[i].str[0] ==  d ) {         segT.update(1, mp[op[i].num], -op[i].num);       } else {         printf( %lld n , segT.tree[1].num[3]);       }     }   }   