func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 200005;   struct ppi {     long long max;     int id;     int w;   } pp1;   struct pi {     int le;     int ri;     int max;     int id;   } pp[maxn << 2];   void build(int tot, int le, int ri) {     pp[tot].le = le;     pp[tot].ri = ri;     pp[tot].max = -1000000001;     if (le == ri) return;     build(2 * tot, le, (le + ri) / 2);     build(2 * tot + 1, (le + ri) / 2 + 1, ri);   }   void merg(int tot, int p, int k, int id) {     if (pp[tot].le == pp[tot].ri) {       if (pp[tot].max < k) {         pp[tot].max = k;         pp[tot].id = id;       }       return;     }     int mid = (pp[tot].le + pp[tot].ri) / 2;     if (p <= mid) {       merg(2 * tot, p, k, id);     } else       merg(2 * tot + 1, p, k, id);     if (pp[2 * tot].max > pp[2 * tot + 1].max) {       pp[tot].max = pp[2 * tot].max;       pp[tot].id = pp[2 * tot].id;     } else {       pp[tot].max = pp[2 * tot + 1].max;       pp[tot].id = pp[2 * tot + 1].id;     }   }   ppi query(int tot, int l, int r) {     if (pp[tot].le >= l && pp[tot].ri <= r) {       pp1.max = pp[tot].max;       pp1.id = pp[tot].id;       return pp1;     }     int mid;     mid = (pp[tot].le + pp[tot].ri) / 2;     ppi pp2;     pp2.max = -1000000001;     if (l <= mid) {       pp1 = query(2 * tot, l, r);       if (pp1.max > pp2.max) {         pp2.max = pp1.max;         pp2.id = pp1.id;       }     }     if (r > mid) {       pp1 = query(2 * tot + 1, l, r);       if (pp1.max > pp2.max) {         pp2.max = pp1.max;         pp2.id = pp1.id;       }     }     return pp2;   }   struct pppi {     int l;     int r;     int c;     int id;     int ii;   } pp3[maxn], pp4[maxn], pp5[maxn << 1];   int a[maxn];   int cmp(pppi a, pppi b) {     if (a.l != b.l) return a.l < b.l;     return a.id > b.id;   }   int cmp1(pppi a, pppi b) {     if (a.r != b.r) return a.r < b.r;     return a.id < b.id;   }   int cmp2(pppi a, pppi b) {     if (a.r != b.r) return a.r < b.r;     return a.id > b.id;   }   int main() {     int i, n, m;     cin >> n >> m;     int tot = 1;     ppi pp6;     pp6.max = -10000;     for (i = 1; i <= n; i++) {       scanf( %d%d , &pp3[i].l, &pp3[i].r);       a[i] = pp3[i].r;       pp3[i].id = 1;       pp3[i].ii = i;       pp5[tot] = pp3[i];       tot++;     }     sort(a + 1, a + 1 + n);     for (i = 1; i <= m; i++) {       scanf( %d%d%d , &pp4[i].l, &pp4[i].r, &pp4[i].c);       pp4[i].id = -1;       pp4[i].ii = i;       pp5[tot] = pp4[i];       tot++;     }     tot--;     build(1, 1, n);     sort(pp5 + 1, pp5 + 1 + tot, cmp);     for (i = 1; i <= tot; i++) {       if (pp5[i].id == 1) {         int p = lower_bound(a + 1, a + 1 + n, pp5[i].r) - a;         merg(1, p, pp5[i].r, pp5[i].ii);       } else {         int p = lower_bound(a + 1, a + 1 + n, pp5[i].l) - a;         ppi pp7;         if (p >= 1 && p <= n)           pp7 = query(1, p, n);         else           pp7.max = 0;         if ((min(pp7.max, (long long)pp5[i].r) - pp5[i].l) * pp5[i].c > pp6.max) {           pp6.max = (min(pp7.max, (long long)pp5[i].r) - pp5[i].l) * pp5[i].c;           pp6.id = pp7.id;           pp6.w = pp5[i].ii;         }       }     }     for (i = 1; i <= n; i++) {       a[i] = pp3[i].l;     }     sort(a + 1, a + 1 + n);     build(1, 1, n);     sort(pp5 + 1, pp5 + tot + 1, cmp1);     for (i = tot; i >= 1; i--) {       if (pp5[i].id == 1) {         int p = lower_bound(a + 1, a + 1 + n, pp5[i].l) - a;         merg(1, p, -pp5[i].l, pp5[i].ii);       } else {         int p = lower_bound(a + 1, a + 1 + n, pp5[i].r) - a;         if (p > n) p--;         if (p >= 1 && p <= n && a[p] > pp5[i].r) p--;         ppi pp7;         if (p >= 1 && p <= n) {           pp7 = query(1, 1, p);           pp7.max = -pp7.max;           if ((pp5[i].r - max((long long)pp5[i].l, pp7.max)) * pp5[i].c >               pp6.max) {             pp6.max = (pp5[i].r - max((long long)pp5[i].l, pp7.max)) * pp5[i].c;             pp6.id = pp7.id;             pp6.w = pp5[i].ii;           }         }       }     }     sort(pp5 + 1, pp5 + 1 + n, cmp2);     build(1, 1, n);     for (i = 1; i <= tot; i++) {       if (pp5[i].id == 1) {         int p = lower_bound(a + 1, a + 1 + n, pp5[i].l) - a;         merg(1, p, pp5[i].r - pp5[i].l, pp5[i].ii);       } else {         int p = lower_bound(a + 1, a + 1 + n, pp5[i].l) - a;         if (p >= 1 && p <= n) {           ppi pp7 = query(1, p, n);           if (pp7.max * pp5[i].c > pp6.max) {             pp6.max = pp7.max * pp5[i].c;             pp6.id = pp7.id;             pp6.w = pp5[i].ii;           }         }       }     }     if (pp6.max >= 0)       cout << pp6.max << endl;     else       cout << 0 << endl;     if (pp6.max > 0) cout << pp6.id <<     << pp6.w;   }   