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...