func_code_string: #include <bits/stdc++.h>   using namespace std;   long long input() {     long long x;     scanf( %lld , &x);     return x;   }   const int inf = 1e9;   int clamp(int a, int l, int r) {     if (a < l) a = l;     if (a > r) a = r;     return a;   }   int main() {     int n, m;     cin >> n >> m;     vector<int> pos(1010101, -1);     vector<int> L(1010101, -1), R(1010101, -1);     set<tuple<int, int, int, int>> st;     const int MostLeft = 1010101 - 2;     const int MostRight = 1010101 - 3;     pos[MostLeft] = -inf;     pos[MostRight] = inf;     const auto calcPos = [&](int i, int j) {       if (i == MostLeft && j == MostRight) return 1;       return clamp((pos[i] + pos[j]) / 2, 1, n);     };     const auto calcDist = [&](int i, int j) {       if (i == MostLeft && j == MostRight)         return n - 1;       else if (i == MostLeft)         return pos[j] - 1;       else if (j == MostRight)         return n - pos[i];       return (pos[j] - pos[i]) / 2;     };     for (int ii = 0; ii < m; ii++) {       int t = input();       int id = input();       if (t == 1) {         int lid, rid;         if (st.empty()) {           lid = MostLeft;           rid = MostRight;         } else {           tie(ignore, ignore, lid, rid) = *st.begin();           st.erase(st.begin());         }         pos[id] = calcPos(lid, rid);         R[lid] = L[rid] = id;         L[id] = lid;         R[id] = rid;         st.emplace(-calcDist(lid, id), pos[lid], lid, id);         st.emplace(-calcDist(id, rid), pos[id], id, rid);         printf( %d n , pos[id]);       } else {         int lid = L[id];         int rid = R[id];         R[lid] = rid;         L[rid] = lid;         st.erase(make_tuple(-calcDist(lid, id), pos[lid], lid, id));         st.erase(make_tuple(-calcDist(id, rid), pos[id], id, rid));         st.emplace(-calcDist(lid, rid), pos[lid], lid, rid);       }     }   }   