Submission #675218

#TimeUsernameProblemLanguageResultExecution timeMemory
675218vjudge1Trampoline (info1cup20_trampoline)C++17
100 / 100
289 ms18368 KiB
#include<bits/stdc++.h>
using namespace std;
int r,c,n,t;
pair <int,int> a[200100];
int nxt[20][200100];
void out(bool x){
    if (x)cout<<"Yes";
    else cout<<"No";
    cout<<'\n';
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
    cin>>r>>c>>n;
    for (int i = 1;i <= n;i ++){
        cin>>a[i].first>>a[i].second;
    }
    sort(a+1,a+1+n);
    for (int i = 1;i <= n;i ++){
        nxt[0][i] = lower_bound(a+1,a+1+n,make_pair(a[i].first + 1,a[i].second)) - (a);
        if (a[nxt[0][i]].first != a[i].first + 1)nxt[0][i] = n + 1;
    }
    nxt[0][n+1] = n+1;
    for (int j = 1;j < 20;j ++){
        for (int i = 1;i <= n+1;i ++){
            nxt[j][i] = nxt[j-1][nxt[j-1][i]];
        }
    }
    cin>>t;
    while (t--){
        int xs,ys,xe,ye;
        cin>>xs>>ys>>xe>>ye;
        int cur = lower_bound(a+1,a+1+n,make_pair(xs,ys)) - (a);
        if (xs == xe){
            out(ys <= ye);
        }
        else{
            if (xs < xe){
                int k = xe - xs - 1;
                for (int j = 19;j >= 0;j --){
                    if ((1<<j) <= k){
                        k -= (1<<j);
                        cur = nxt[j][cur];
                    }
                }
                out(a[cur].first == xe - 1 && a[cur].second <= ye);
            }
            else{
                out(0);
            }
        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...