func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 400005;   int tr[N << 2], lz[N << 2];   set<int> st[N];   inline void push(int v, int l, int r) {     tr[v] += lz[v];     if (l != r) {       lz[2 * v] += lz[v];       lz[2 * v + 1] += lz[v];     }     lz[v] = 0;   }   void build(int v, int l, int r, int n) {     lz[v] = 0;     if (l == r) {       tr[v] = l - 1;       return;     }     int m = (l + r) / 2;     build(2 * v, l, m, n);     build(2 * v + 1, m + 1, r, n);     tr[v] = max(tr[2 * v], tr[2 * v + 1]);   }   void update(int v, int s, int e, int l, int r, int x) {     push(v, s, e);     if (l <= s && e <= r) {       tr[v] += x;       if (s != e) {         lz[2 * v] += x;         lz[2 * v + 1] += x;       }       return;     }     if (r < s || e < l || l > r) return;     int m = (s + e) / 2;     update(2 * v, s, m, l, r, x);     update(2 * v + 1, m + 1, e, l, r, x);     tr[v] = max(tr[2 * v], tr[2 * v + 1]);   }   int query(int v, int s, int e, int l, int r) {     push(v, s, e);     if (l <= s && e <= r) return tr[v];     int m = (s + e) / 2;     if (r <= m) return query(2 * v, s, m, l, r);     if (m < l) return query(2 * v + 1, m + 1, e, l, r);     return max(query(2 * v, s, m, l, r), query(2 * v + 1, m + 1, e, l, r));   }   int main() {     ios::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     cout << setprecision(32);     int n, k, m;     cin >> n >> k >> m;     int n2 = n << 1;     build(1, 1, n2, n2);     int x, y;     map<int, int> mp;     while (m--) {       cin >> x >> y;       y += abs(k - x);       if (st[y].find(x) != st[y].end()) {         update(1, 1, n2, 1, y, -1);         st[y].erase(x);         mp[y]--;         if (!mp[y]) mp.erase(y);       } else {         update(1, 1, n2, 1, y, 1);         st[y].insert(x);         mp[y]++;       }       if (mp.empty()) {         cout << 0 <<   n ;         continue;       }       int mx = mp.rbegin()->first;       cout << max(0, query(1, 1, n2, 1, mx) - n) <<   n ;     }     return 0;   }   