func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1 << 17;   int MAX[maxn << 1], lazy[maxn << 1], e[maxn];   void push_up(int now) { MAX[now] = max(MAX[now << 1], MAX[now << 1 | 1]); }   void push_down(int now) {     lazy[now << 1] += lazy[now];     lazy[now << 1 | 1] += lazy[now];     MAX[now << 1] += lazy[now];     MAX[now << 1 | 1] += lazy[now];     lazy[now] = 0;   }   void update(int now, int p, int L, int R, int l, int r) {     if (R < l) return;     if (R >= r) {       MAX[now] += p;       lazy[now] += p;       return;     }     if (lazy[now]) push_down(now);     int mid = (l + r) >> 1;     update(now << 1, p, L, R, l, mid);     update(now << 1 | 1, p, L, R, mid + 1, r);     push_up(now);   }   int query(int now, int l, int r) {     int mid = (l + r) >> 1;     if (l == r) return l;     if (lazy[now]) push_down(now);     if (MAX[now << 1 | 1] > 0)       return query(now << 1 | 1, mid + 1, r);     else       return query(now << 1, l, mid);   }   int main() {     int m, pos, op, x;     scanf( %d , &m);     for (int i = 0; i < m; i++) {       scanf( %d%d , &pos, &op);       if (op == 1) {         scanf( %d , &x);         e[pos] = x;         update(1, 1, 1, pos, 1, m);       } else {         update(1, -1, 1, pos, 1, m);       }       if (MAX[1] > 0) {         printf( %d n , e[query(1, 1, m)]);       } else         puts( -1 );     }     return 0;   }   