Submission #1320167

#TimeUsernameProblemLanguageResultExecution timeMemory
1320167bearrbearrTrampoline (info1cup20_trampoline)C++20
100 / 100
785 ms59016 KiB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#define int long long
#define ii pair<int,int>
#define fir first
#define sec second
#define pb push_back

int r,c,n;
int bin[200002][20];

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>r>>c>>n;
    map<int,vector<ii> > mp;
    int x[n+1],y[n+1];
    vector<int>mana;

    for(int q=1;q<=n;q++){
        cin>>x[q]>>y[q];
        mp[x[q]].pb({y[q],q});
        mana.pb(x[q]);
    }
    sort(mana.begin(),mana.end());
    mana.erase(unique(mana.begin(),mana.end()),mana.end());

    for(auto a : mp){
        sort(mp[a.fir].begin(),mp[a.fir].end());
    }

    for(auto a : mana){
        if(mp[a+1].empty())continue;

        for(auto [b,id] : mp[a]){
            int idx=lower_bound(mp[a+1].begin(),mp[a+1].end(),make_pair(b,0LL))-mp[a+1].begin();
            if(idx>=mp[a+1].size())break;
            bin[id][0]=mp[a+1][idx].sec;
        }
    }

    for(int q=1;q<20;q++){
        for(int w=1;w<=n;w++){
            bin[w][q]=bin[bin[w][q-1]][q-1];
        }
    }

    int qu; cin>>qu;
    while(qu--){
        int xm,ym,xs,ys;
        cin>>xm>>ym>>xs>>ys;
        if(xm>xs || ym>ys){
            cout<<"No"<<endl;continue;
        }
        if(xm==xs){
            cout<<"Yes"<<endl; continue;
        }
        if(mp[xm].empty()){
            cout<<"No"<<endl;continue;
        }

        int idx=lower_bound(mp[xm].begin(),mp[xm].end(),make_pair(ym,0LL))-mp[xm].begin();
        if(idx==mp[xm].size()){
            cout<<"No"<<endl; continue;
        }

        int id=mp[xm][idx].sec;
        int jrk=xs-xm-1;

        for(int q=19;q>=0;q--){
            if(jrk>=(1<<q)){
                jrk-=(1<<q);
                id=bin[id][q];
            }
        }

        if(id==0 || y[id]>ys){
            cout<<"No"<<endl;
        }
        else{
            cout<<"Yes"<<endl;
        }
    }
}
#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...