func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 200010;   int mx[maxn << 2], ls[maxn << 2], rs[maxn << 2], lp[maxn << 2], rp[maxn << 2];   bool col[maxn << 2];   void make(int rt, int l, int r) {     lp[rt] = l;     rp[rt] = r;     ls[rt] = rs[rt] = r - l + 1;     mx[rt] = (ls[rt] - 1) / 2;     col[rt] = true;   }   void build(int l, int r, int rt) {     make(rt, l, r);     if (l == r) return;     int m = l + r >> 1;     build(l, m, rt << 1);     build(m + 1, r, rt << 1 | 1);   }   void pushup(int rt, int l, int r) {     int L = rt << 1, R = L + 1, m = l + r >> 1;     mx[rt] = mx[L], lp[rt] = lp[L], rp[rt] = rp[L], col[rt] = col[L];     if (!col[rt] || (rs[L] + ls[R] - 1) / 2 > mx[rt]) {       mx[rt] = rs[L] + ls[R] - 1 >> 1;       lp[rt] = m - rs[L] + 1;       rp[rt] = m + ls[R];       col[rt] = (lp[rt] <= rp[rt]);     }     if (!col[rt] || mx[R] > mx[rt]) {       mx[rt] = mx[R];       lp[rt] = lp[R];       rp[rt] = rp[R];       col[rt] = col[R];     }     ls[rt] = ls[L] + (ls[L] == m - l + 1) * ls[R];     rs[rt] = rs[R] + (rs[R] == r - m) * rs[L];   }   int n, m;   void update(int p, int l = 0, int r = n - 1, int rt = 1) {     if (l == r) {       col[rt] ^= 1;       if (col[rt])         make(rt, l, r);       else         ls[rt] = rs[rt] = 0;       mx[rt] = -1;       return;     }     int m = l + r >> 1;     if (p <= m)       update(p, l, m, rt << 1);     else       update(p, m + 1, r, rt << 1 | 1);     pushup(rt, l, r);   }   int pos[1000010];   int main() {     scanf( %d%d , &n, &m);     build(0, n - 1, 1);     int op, id;     while (m--) {       scanf( %d%d , &op, &id);       if (op == 2) {         update(pos[id]);       } else {         int a = ls[1] - 1, b = rs[1] - 1, c = mx[1];         if (a >= b && a >= c) {           printf( 1 n );           pos[id] = 0;           update(0);         } else if (c >= b) {           int t = (lp[1] + rp[1]) / 2;           pos[id] = t;           update(t);           printf( %d n , t + 1);         } else {           printf( %d n , n);           pos[id] = n - 1;           update(n - 1);         }       }     }     return 0;   }   