func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = (int)1e6 + 9;   set<pair<int, int> > len, pos;   int n, m;   void add_seg(int L, int R) {     if (L > R) return;     int sz = R - L + 1;     pos.insert(make_pair(L, sz));     if (L != 1 && R != n) sz = (sz + 1) / 2;     len.insert(make_pair(sz, L));   }   void rem_seg(int L, int R) {     if (L > R) return;     int sz = R - L + 1;     pos.erase(make_pair(L, sz));     if (L != 1 && R != n) sz = (sz + 1) / 2;     len.erase(make_pair(sz, L));   }   int loc[N];   void add(int x) {     auto it = len.end();     --it;     int opt = it->first;     it = len.lower_bound(make_pair(opt, -1));     auto segt = pos.lower_bound(make_pair(it->second, -1));     int L = segt->first;     int R = L + (segt->second) - 1;     rem_seg(L, R);     int M = (L + R) / 2;     if (L == 1)       M = 1;     else if (R == n)       M = R;     cout << M <<   n ;     loc[x] = M;     add_seg(L, M - 1);     add_seg(M + 1, R);   }   void rem(int x) {     int pp = loc[x];     loc[x] = 0;     int L = pp, R = pp;     auto v2 = pos.lower_bound(make_pair(pp + 1, -1));     if (v2 != pos.end() && v2->first == pp + 1) {       R = (v2->first) + (v2->second) - 1;       rem_seg(v2->first, (v2->first) + (v2->second) - 1);     }     v2 = pos.lower_bound(make_pair(pp + 1, -1));     if (v2 != pos.begin()) {       --v2;       if ((v2->first) + (v2->second) - 1 == pp - 1) {         L = v2->first;         rem_seg(v2->first, pp - 1);       }     }     add_seg(L, R);   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     ;     cin >> n >> m;     add_seg(1, n);     int typ;     int id;     for (int i = 0; i < m; i++) {       cin >> typ >> id;       if (typ == 1)         add(id);       else         rem(id);     }     return 0;   }   