#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;
vector<ii>z=mp[a+1];
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(id>=(1<<q)){
jrk-=(1<<q);
id=bin[id][q];
}
}
if(id==0 || y[id]>ys){
cout<<"No"<<endl;
}
else{
cout<<"Yes"<<endl;
}
}
}
| # | 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... |