//#pragma GCC target ("avx2")   
//#pragma GCC optimize ("Ofast")   
#include <bits/stdc++.h>   
using namespace std;  
//#define int long long  
#define F first 
#define S second 
#define pb push_back 
const int N = 2e5+100, NN=19;
const int mod=1e9+7;
int up[N][NN];
map < int, vector < int > > v;
//int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); }
//int lcm(int a, int b) { return a / gcd(a, b) * b; }
//int binpow(int a,int b){if(!b)return 1; if(b&1)return a*binpow(a,b-1)%mod; int x=binpow(a,b/2); return x*x%mod;}
signed main(){   
    ios_base::sync_with_stdio(0);   
    cin.tie(0);   
    cout.tie(0);
    int r, c, n;
    cin >> r >> c >> n;
    pair < int, int > a[n+1];
    map<pair<int, int>, int>mp;
    for(int i=1;i<=n;i++){
        cin >> a[i].F >> a[i].S;
    }
    sort(a+1, a+n+1);
    for(int i=1;i<=n;i++){
        mp[a[i]] = i;
        v[a[i].F].pb(a[i].S);
    }
    for(int i=1;i<=n;i++){
        int xs=a[i].F, ys=a[i].S;
        int l=0, r=v[xs].size()-1, jump=-1;
        while(l<=r){
            int m=(l+r)/2;
            if(v[xs][m]<ys){
                l=m+1;
            }
            else{
                r=m-1;
                jump=m;
            }
        }
        if(jump==-1) continue;
        else{
            up[i][0] = mp[{xs, v[xs][jump]}];
        }
    }
    for(int i=n;i>=1;i--){
        for(int j=1;j<=18;j++){
            up[i][j]=up[up[i][j-1]][j-1];
        }   
    }
    int t;
    cin >> t;
    while(t--){
        int xs, ys, xe, ye;
        cin >> xs >> ys >> xe >> ye;
        if(xs==xe && ys<=ye) cout << "Yes\n";
        else if(ys>ye || xe<xs) cout << "No\n";
        else{
            int m = xe-xs;
            int ans=-1;
            int l=0, r=v[xs].size()-1;
            while(l<=r){
                int mm=(l+r)/2;
                if(v[xs][mm]<ys) l=mm+1;
                else{
                    r=mm-1;
                    ans=mm;
                }
            }
            if(ans==-1){
                cout << "No\n";
                continue;
            }
            int i = mp[{xs, v[xs][ans]}];
            for(int j=0;j<=18;j++){
                if(((m>>j)&1)){
                    i = up[i][j];
                }
            }
            if(!i || a[i].S>ye ) cout << "No\n";
            else cout << "Yes\n";
        }
        
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |