func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 8e5 + 10;   struct Node {     int sum;     int free;     int carry;     Node() {       sum = 0;       free = 1;       carry = 0;     }     Node(int x) {       sum = x;       if (x == 0) {         free = 1;         carry = 0;       } else {         free = 0;         carry = x - 1;       }     }     Node(int sum_, int free_, int carry_) {       sum = sum_;       free = free_;       carry = carry_;     }     friend Node conq(const Node &l, const Node &r) {       if (l.carry <= r.free) {         return Node(l.sum + r.sum, l.free + r.free - l.carry, r.carry);       } else {         return Node(l.sum + r.sum, l.free, r.carry + l.carry - r.free);       }     }   };   namespace ST {   int cnt = 0;   int a[N];   Node t[4 * N];   void pull(int v) { t[v] = conq(t[2 * v + 1], t[2 * v + 2]); }   void build(int v, int l, int r) {     if (l + 1 == r) {       t[v] = Node();     } else {       int m = (r + l) >> 1;       build(2 * v + 1, l, m);       build(2 * v + 2, m, r);       pull(v);     }   }   void init() { build(0, 0, N); }   void add(int v, int l, int r, int pos, int val) {     if (l + 1 == r) {       cnt += val;       a[l] += val;       t[v] = Node(a[l]);     } else {       int m = (r + l) >> 1;       if (pos < m) {         add(2 * v + 1, l, m, pos, val);       } else {         add(2 * v + 2, m, r, pos, val);       }       pull(v);     }   }   void query(int v, int l, int r, int ql, int qr, Node &ans) {     if (r <= ql || qr <= l) {       return;     } else if (ql <= l && r <= qr) {       ans = conq(ans, t[v]);     } else {       int m = (r + l) >> 1;       query(2 * v + 1, l, m, ql, qr, ans);       query(2 * v + 2, m, r, ql, qr, ans);     }   }   int ok(int pref) {     Node ans;     query(0, 0, N, 0, pref + 1, ans);     return ans.carry == 0 && ans.sum == cnt;   }   void add(int pos, int val) { add(0, 0, N, pos, val); }   int solve() {     int l = -1;     int r = N - 1;     while (r - l > 1) {       int m = (r + l) >> 1;       if (ok(m)) {         r = m;       } else {         l = m;       }     }     assert(ok(r));     if (l > 0) assert(!ok(l));     return r;   }   }  // namespace ST   signed main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     ST::init();     int n, k, q;     cin >> n >> k >> q;     set<pair<int, int>> s;     while (q--) {       int x, y;       cin >> x >> y;       int pos = y + abs(x - k);       if (!s.count({x, y})) {         ST::add(pos, 1);         s.insert({x, y});       } else {         ST::add(pos, -1);         s.erase({x, y});       }       cout << max(0, ST::solve() - n) <<   n ;     }   }   