제출 #1318619

#제출 시각아이디문제언어결과실행 시간메모리
1318619MuhammadSaramTrampoline (info1cup20_trampoline)C++20
100 / 100
1297 ms66928 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define mp make_pair const int M = 2e5 + 1, lg = 18; int nxt[M][lg]; int main() { ios::sync_with_stdio(0); cin.tie(NULL), cout.tie(NULL); int r,c,n; cin>>r>>c>>n; map<int,set<int>> mp; set<int> se; map<pair<int,int>,int> ind; int a[n],b[n]; for (int i=0;i<n;i++) { cin>>a[i]>>b[i]; mp[a[i]].insert(b[i]); se.insert(a[i]); ind[{a[i],b[i]}]=i; } for (int i:se) { bool b=se.count(i+1); for (int j:mp[i]) { int id=ind[{i,j}]; if (b) { auto it=mp[i+1].lower_bound(j); if (it!=mp[i+1].end()) nxt[id][0]=ind[{i+1,*it}]; else nxt[id][0]=id; } else nxt[id][0]=id; } } for (int p=1;p<lg;p++) for (int i=0;i<n;i++) nxt[i][p]=nxt[nxt[i][p-1]][p-1]; int q; cin>>q; while (q--) { int x,y,x1,y1; cin>>x>>y>>x1>>y1; if (x==x1) cout<<(y<=y1?"Yes":"No")<<endl; else { if (!se.count(x) or x1<x) { cout<<"No"<<endl; continue; } auto it=mp[x].lower_bound(y); if (it==mp[x].end()) { cout<<"No"<<endl; continue; } int id=ind[{x,*it}]; for (int p=29;p>=0;p--) if ((x1-x-1)>>p&1) id=nxt[id][p]; if (a[id]==x1-1 && b[id]<=y1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } 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...