func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 3e5 + 10;   int n, m, cnt, k;   struct node {     int l, r, sum = 1999999999;   } g[maxn * 20];   inline int read() {     register int x = 0, f = 1;     char ch = getchar();     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (ch <=  9  && ch >=  0 ) x = x * 10 + ch -  0 , ch = getchar();     return x * f;   }   struct value {     int x, y, id;   } x[maxn];   bool cmp(value v1, value v2) { return v1.x > v2.x; }   int root[maxn];   void update(int num, int wht, int &rt, int l, int r) {     g[++cnt] = g[rt];     if (l == r) {       g[cnt].sum = min(g[rt].sum, wht);       rt = cnt;       return;     }     rt = cnt;     int mid = l + r >> 1;     if (num <= mid)       update(num, wht, g[rt].l, l, mid);     else       update(num, wht, g[rt].r, mid + 1, r);     g[rt].sum = max(g[g[rt].l].sum, g[g[rt].r].sum);   }   int query(int rt, int l, int r, int lb, int rb) {     if (lb >= l && rb <= r) return g[rt].sum;     if (lb > r || l > rb) return -1999999999;     int mid = lb + rb >> 1;     return max(query(g[rt].l, l, r, lb, mid), query(g[rt].r, l, r, mid + 1, rb));   }   int main() {     cnt = 1;     scanf( %d%d%d , &n, &m, &k);     for (int i = 1; i <= k; i++) {       x[i].x = read(), x[i].y = read(), x[i].id = read();     }     sort(x + 1, x + 1 + k, cmp);     for (int i = 1; i <= k; i++) {       root[i] = root[i - 1];       update(x[i].id, x[i].y, root[i], 1, n);     }     while (m--) {       int A = read(), B = read(), X = read(), Y = read();       int lb = 1, asn = -1, rb = k;       while (lb <= rb) {         int mid = lb + rb >> 1;         if (x[mid].x >= X) {           lb = mid + 1;           asn = mid;         } else {           rb = mid - 1;         }       }       int ans = query(root[asn], A, B, 1, n);       if (ans <= Y)         printf( yes n );       else         printf( no n );       fflush(stdout);     }     return 0;   }   