#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define s second
#define pll pair<int,int>
#define g0(x) get<0>(x)
#define g1(x) get<1>(x)
#define g2(x) get<2>(x)
int twok[200005][20];
//~ pair<int,int> par(pair<int,int> c){
//~ if(p[c].first==0){
//~ return c;
//~ }
//~ return p[c]=par(p[c]);
//~ }
int kpar(int c, int k){
for(int i=0;i<20;i++){
if(1<<i & k){
c=twok[c][i];
}
}
return c;
}
signed main(){
int r,c,n;
cin>>r>>c>>n;
vector<tuple<int,int,int>> v;// vector of {x,y}, pos.
vector<pll> pos(n+1);
for(int i=1;i<=n;i++){
int a,b;cin>>a>>b;
v.push_back({a,b,i});
pos[i]={a,b};
}
sort(v.begin(),v.end());
for(auto [x,y,i]:v){
auto it=lower_bound(v.begin(),v.end(),make_tuple(x+1,y,0ll));
if(it!=v.end() and g0(*it) == x+1){
twok[i][0]=g2(*it);
}
}
for(int i=1;i<20;i++){
for(int j=1;j<=n;j++){
twok[j][i]=twok[twok[j][i-1]][i-1];
}
}
int t;cin>>t;
for(int i=0;i<t;i++){
int sx, sy, nx, ny;cin>>sx>>sy>>nx>>ny;
if(sx == nx){
if(sy <= ny)cout<<"Yes\n";
else cout<<"No\n";
continue;
}
auto it=lower_bound(v.begin(),v.end(),make_tuple(sx,sy,0ll));
if(it==v.end() or g0(*it)!=sx){
cout<<"No\n";
continue;
}
int st=g2(*it);
st=kpar(st, nx-sx-1);
if(st==0){
cout<<"No\n";
}
else {
if(pos[st].s <= ny){
cout<<"Yes\n";
}
else cout<<"No\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... |