func_code_string: #include <bits/stdc++.h>   using namespace std;   int a[100005], b[100005], c[100005];   class segtree {    public:     int seg[524288 * 2];     int lazy[524288 * 2];     void init() {       for (int i = 0; i < 524288 * 2; i++) {         seg[i] = 0;       }     }     void lazy_evaluate(int x) {       if (x * 2 + 2 >= 524288 * 2) return;       lazy[x * 2 + 1] += lazy[x];       lazy[x * 2 + 2] += lazy[x];       seg[x * 2 + 1] += lazy[x];       seg[x * 2 + 2] += lazy[x];       lazy[x] = 0;     }     int update(int a, int b, int k, int lb, int ub, int val) {       pair<int, int> p;       p.first = -2000000000, p.second = -2000000000;       if (ub < a || b < lb) return seg[k];       if (a <= lb && ub <= b) {         lazy[k] += val;         seg[k] += val;         return seg[k];       }       if (lazy[k]) lazy_evaluate(k);       int p1 = update(a, b, k * 2 + 1, lb, (lb + ub) / 2, val);       int p2 = update(a, b, k * 2 + 2, (lb + ub) / 2 + 1, ub, val);       return seg[k] = max(p1, p2);     }     int query() { return seg[0]; }   } seg;   int main() {     int n;     vector<pair<int, pair<int, int> > > p;     scanf( %d , &n);     for (int i = 0; i < n; i++) {       scanf( %d %d %d , &a[i], &b[i], &c[i]);       p.push_back(make_pair(a[i], make_pair(b[i], c[i])));     }     sort(p.begin(), p.end());     seg.init();     int ret = -1;     int lb, ub;     priority_queue<pair<int, int>, vector<pair<int, int> >,                    greater<pair<int, int> > >         que;     for (int i = 0; i < n; i++) {       while (!que.empty() && p[i].first > que.top().first) {         seg.update(p[que.top().second].second.first,                    p[que.top().second].second.second, 0, 0, 524288 - 1, -1);         que.pop();       }       que.push(make_pair(p[i].second.first, i));       seg.update(p[i].second.first, p[i].second.second, 0, 0, 524288 - 1, 1);       int pp = seg.query();       if (pp > ret) {         ret = pp;         lb = p[i].first;       }     }     printf( %d n , ret);     priority_queue<int, vector<int>, greater<int> > que2;     int next;     vector<pair<int, int> > in;     for (int i = 0; i < n; i++) {       if (p[i].second.first >= lb && p[i].first <= lb) {         in.push_back(make_pair(p[i].second.first, i));       }     }     sort(in.begin(), in.end());     next = 0;     for (int j = lb;; j++) {       while (!que2.empty() && que2.top() < j) que2.pop();       while (next != in.size() && in[next].first <= j) {         que2.push(p[in[next].second].second.second);         next++;       }       if (que2.size() == ret) {         ub = j;         break;       }     }     int x = 0;     for (int i = 0; i < n; i++) {       if (a[i] <= lb && ub <= c[i] && lb <= b[i] && b[i] <= ub) {         x++;         printf( %d%c , i + 1, x == ret ?   n  :    );       }     }   }   