Submission #784310

#TimeUsernameProblemLanguageResultExecution timeMemory
784310TrunktyTrampoline (info1cup20_trampoline)C++14
100 / 100
1078 ms98684 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll

int r,c,n,t;
map<int,set<int>> mp;
map<pair<int,int>,int> pos;
map<int,pair<int,int>> rev;
int nextpos=1;
int jump[200005][21];

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> r >> c >> n;
    for(int i=1;i<=n;i++){
        int a,b;
        cin >> a >> b;
        mp[a].insert(b);
    }
    for(auto it=mp.begin();it!=mp.end();it++){
        int x = it->first;
        set<int> s = it->second;
        for(int y:s){
            pos[{x,y}] = nextpos;
            rev[nextpos] = {x,y};
            nextpos++;
        }
    }
    for(auto it=mp.begin();it!=mp.end();it++){
        int x = it->first;
        set<int> s = it->second;
        for(int y:s){
            auto it = mp[x+1].lower_bound(y);
            if(it!=mp[x+1].end()){
                jump[pos[{x,y}]][0] = pos[{x+1,(*it)}];
            }
        }
    }
    for(int j=1;j<=20;j++){
        for(int i=1;i<=n;i++){
            jump[i][j] = jump[jump[i][j-1]][j-1];
        }
    }
    cin >> t;
    for(int i=1;i<=t;i++){
        int x1,y1,x2,y2;
        cin >> x1 >> y1 >> x2 >> y2;
        if(x1>x2){
            cout << "No" << "\n";
        }
        else if(x1==x2){
            if(y1<=y2){
                cout << "Yes" << "\n";
            }
            else{
                cout << "No" << "\n";
            }
        }
        else{
            auto it = mp[x1].lower_bound(y1);
            if(it==mp[x1].end()){
                cout << "No" << "\n";
                continue;
            }
            int p = pos[{x1,(*it)}];
            for(int j=20;j>=0;j--){
                if(x1+(1<<j)<=x2-1){
                    x1 += (1<<j);
                    p = jump[p][j];
                }
            }
            if(p==0 or rev[p].second>y2){
                cout << "No" << "\n";
            }
            else{
                cout << "Yes" << "\n";
            }
        }
    }
    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...