func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e6 + 10;   inline int read() {     char ch = getchar();     int x = 0, f = 1;     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 ) {       x = (x << 1) + (x << 3) -  0  + ch;       ch = getchar();     }     return x * f;   }   struct node {     int x, y, z;     bool operator<(const node W) const { return y < W.y; }   } a[N];   int n;   long long b[N];   int cnt;   pair<long long, int> tr[N << 2];   long long lazy[N << 2];   long long ans;   void pushup(int rt) {     if (tr[rt << 1].first > tr[rt << 1 | 1].first)       tr[rt] = tr[rt << 1];     else       tr[rt] = tr[rt << 1 | 1];     tr[rt].first += lazy[rt];   }   void build(int rt, int l, int r) {     if (l == r) {       tr[rt] = {b[l], l};       return;     }     int mid = l + r >> 1;     build(rt << 1, l, mid);     build(rt << 1 | 1, mid + 1, r);     pushup(rt);   }   void update(int rt, int L, int R, int C, int l, int r) {     if (L <= l && R >= r) {       tr[rt].first += C;       lazy[rt] += C;       return;     }     int mid = l + r >> 1;     if (L <= mid) update(rt << 1, L, R, C, l, mid);     if (R > mid) update(rt << 1 | 1, L, R, C, mid + 1, r);     pushup(rt);   }   pair<long long, int> query(int rt, int L, int R, long long tg, int l, int r) {     if (L <= l && R >= r) {       return {tr[rt].first + tg, tr[rt].second};     }     int mid = l + r >> 1;     if (L > mid) {       return query(rt << 1 | 1, L, R, tg + lazy[rt], mid + 1, r);     } else if (R <= mid) {       return query(rt << 1, L, R, tg + lazy[rt], l, mid);     } else {       return max(query(rt << 1 | 1, mid + 1, R, tg + lazy[rt], mid + 1, r),                  query(rt << 1, L, mid, tg + lazy[rt], l, mid));     }   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       scanf( %d%d%d , &a[i].x, &a[i].y, &a[i].z);       if (a[i].x > a[i].y) swap(a[i].x, a[i].y);       b[++cnt] = a[i].x;       b[++cnt] = a[i].y;     }     sort(b + 1, b + cnt + 1);     cnt = unique(b + 1, b + cnt + 1) - (b + 1);     for (int i = 1; i <= n; i++) {       a[i].x = lower_bound(b + 1, b + cnt + 1, a[i].x) - b;       a[i].y = lower_bound(b + 1, b + cnt + 1, a[i].y) - b;     }     build(1, 1, cnt);     sort(a + 1, a + n + 1);     long long tx = 2e9, ty = 2e9;     for (int i = 1; i <= n; i++) {       update(1, 1, a[i].x, a[i].z, 1, cnt);       if (i < n && a[i].y == a[i + 1].y) continue;       pair<long long, int> tmp = query(1, 1, a[i].y, 0, 1, cnt);       if (tmp.first - b[a[i].y] > ans) {         ans = tmp.first - b[a[i].y];         tx = b[tmp.second];         ty = b[a[i].y];       }     }     printf( %lld n , ans);     printf( %lld %lld %lld %lld n , tx, tx, ty, ty);   }   