Submission #1200045

#TimeUsernameProblemLanguageResultExecution timeMemory
1200045WH8Trampoline (info1cup20_trampoline)C++20
100 / 100
665 ms40408 KiB
#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 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...