func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1e6 + 10;   long long M[maxn << 2], tag[maxn << 2];   void gather(int p) { M[p] = max(M[p << 1], M[p << 1 | 1]); }   void push(int p) {     if (tag[p]) {       tag[p << 1] += tag[p];       tag[p << 1 | 1] += tag[p];       M[p << 1] += tag[p];       M[p << 1 | 1] += tag[p];       tag[p] = 0;     }   }   void modify(int p, int tl, int tr, int l, int r, long long v) {     if (tr < l || r < tl) return;     if (l <= tl && tr <= r) {       tag[p] += v;       M[p] += v;       return;     }     push(p);     int mid = (tl + tr) >> 1;     modify(p << 1, tl, mid, l, r, v);     modify(p << 1 | 1, mid + 1, tr, l, r, v);     gather(p);   }   long long query(int p, int tl, int tr, int l, int r) {     if (tr < l || r < tl) return 0ll;     if (l <= tl && tr <= r) return M[p];     push(p);     int mid = (tl + tr) >> 1;     long long ret = query(p << 1, tl, mid, l, r);     ret = max(ret, query(p << 1 | 1, mid + 1, tr, l, r));     return ret;   }   long long c[maxn];   inline int lowbit(int s) { return s & (-s); }   inline void modify(int i, long long x) {     while (i < maxn) c[i] += x, i += lowbit(i);   }   inline long long query(int i) {     long long ret = 0;     while (i > 0) ret += c[i], i -= lowbit(i);     return ret;   }   long long x[maxn], y[maxn];   int main() {     int q;     scanf( %d , &q);     for (int t = 1; t <= q; ++t) {       char op[11];       scanf( %s %lld , op, x + t);       if (op[0] ==  + ) {         scanf( %lld , y + t);         modify(1, 1, 1000000, x[t], x[t], x[t]);         modify(1, 1, 1000000, 1, x[t], y[t]);         modify(x[t], y[t]);       } else if (op[0] ==  - ) {         modify(1, 1, 1000000, x[x[t]], x[x[t]], -x[x[t]]);         modify(1, 1, 1000000, 1, x[x[t]], -y[x[t]]);         modify(x[x[t]], -y[x[t]]);       } else {         long long tmp =             query(1, 1, 1000000, 1, x[t]) - (query(1000000) - query(x[t]));         printf( %lld n , max(x[t], tmp) - x[t]);       }     }     return 0;   }   