func_code_string: #include <bits/stdc++.h>   using namespace std;   bool ans[310000];   struct Query {     int x1, y1, x2, y2, id;   } querys[310000];   bool operator<(Query a, Query b) { return a.x2 < b.x2; }   struct Point {     int x, y;   } points[310000];   bool operator<(Point a, Point b) { return a.x < b.x; }   int minv[310000 << 2];   void pushup(int o) { minv[o] = min(minv[((o) << 1)], minv[((o) << 1 | 1)]); }   void update(int o, int L, int R, int x, int val) {     if (L == R) {       minv[o] = val;       return;     }     int M = (L + R) >> 1;     if (x <= M)       update(((o) << 1), L, M, x, val);     else       update(((o) << 1 | 1), M + 1, R, x, val);     pushup(o);   }   int query(int o, int L, int R, int ql, int qr) {     if (ql <= L && R <= qr) return minv[o];     int M = (L + R) >> 1;     int ans = 0x3f3f3f3f;     if (ql <= M) ans = min(ans, query(((o) << 1), L, M, ql, qr));     if (qr > M) ans = min(ans, query(((o) << 1 | 1), M + 1, R, ql, qr));     return ans;   }   int main() {     int n, m, t, q;     scanf( %d%d%d%d , &n, &m, &t, &q);     for (int i = 1; i <= t; i++) scanf( %d%d , &points[i].x, &points[i].y);     for (int i = 1; i <= q; i++)       scanf( %d%d%d%d , &querys[i].x1, &querys[i].y1, &querys[i].x2,             &querys[i].y2),           querys[i].id = i;     sort(points + 1, points + t + 1);     sort(querys + 1, querys + q + 1);     for (int i = 1, j = 1; i <= q; i++) {       while (j <= t && points[j].x <= querys[i].x2) {         update(1, 1, m, points[j].y, points[j].x);         j++;       }       ans[querys[i].id] |=           query(1, 1, m, querys[i].y1, querys[i].y2) >= querys[i].x1;     }     swap(n, m);     for (int i = 1; i <= t; i++) swap(points[i].x, points[i].y);     for (int i = 1; i <= q; i++) {       swap(querys[i].x1, querys[i].y1);       swap(querys[i].x2, querys[i].y2);     }     sort(points + 1, points + t + 1);     sort(querys + 1, querys + q + 1);     memset(minv, 0, sizeof(minv));     for (int i = 1, j = 1; i <= q; i++) {       while (j <= t && points[j].x <= querys[i].x2) {         update(1, 1, m, points[j].y, points[j].x);         j++;       }       ans[querys[i].id] |=           query(1, 1, m, querys[i].y1, querys[i].y2) >= querys[i].x1;     }     for (int i = 1; i <= q; i++) {       if (ans[i])         printf( YES n );       else         printf( NO n );     }     return 0;   }   