func_code_string: #include <bits/stdc++.h>   using namespace std;   struct SegTree {     int sz;     vector<int> dat;     SegTree(int _sz = 1) {       sz = 1;       while (sz < _sz) sz <<= 1;       dat.resize(sz << 1);     }     void upd(int pos, int val) {       pos += sz - 1;       dat[pos] = val;       while (pos > 1) {         pos >>= 1;         dat[pos] = max(dat[pos << 1], dat[pos << 1 | 1]);       }     }     int qry(int id, int l, int r, int ql, int qr) {       if (qr < l || r < ql) return 0;       if (ql <= l && r <= qr) return dat[id];       return max(qry(id << 1, l, l + r >> 1, ql, qr),                  qry(id << 1 | 1, (l + r >> 1) + 1, r, ql, qr));     }     int qry(int l, int r) { return qry(1, 1, sz, l, r); }   } segx, segy;   int n, m, V;   set<pair<int, int>> tph, thp;   void plant(int p, int h) {     vector<pair<int, int>> v;     for (auto it = thp.begin(); it != thp.end() && it->first < h; it++) {       v.emplace_back(it->second, it->first);     }     thp.emplace(h, p);     tph.emplace(p, h);     v.emplace_back(p, h);     reverse(v.begin(), v.end());     for (auto p : v) {       segx.upd(p.first, 0);     }     for (auto p : v) {       int lis = segx.qry(p.first + 1, n) + 1;       segx.upd(p.first, lis);       segy.upd(p.second, lis);     }   }   void cutdown(int id) {     vector<pair<int, int>> v;     for (auto it = tph.begin(); id--; it++) {       if (id)         v.emplace_back(it->first, it->second);       else {         thp.erase(make_pair(it->second, it->first));         segx.upd(it->first, 0);         segy.upd(it->second, 0);         tph.erase(it);       }     }     reverse(v.begin(), v.end());     for (auto p : v) {       segy.upd(p.second, 0);     }     for (auto p : v) {       int lis = segy.qry(p.second + 1, V) + 1;       segx.upd(p.first, lis);       segy.upd(p.second, lis);     }   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n >> m;     segx = SegTree(n);     segy = SegTree(V = m + 10);     while (m--) {       int typ, x, y;       cin >> typ >> x;       if (typ == 1) {         cin >> y;         plant(x, y + m);       } else {         cutdown(x);       }       cout << segx.qry(1, n) <<   n ;     }     return 0;   }   