Submission #1318518

#TimeUsernameProblemLanguageResultExecution timeMemory
1318518Jawad_Akbar_JJTrampoline (info1cup20_trampoline)C++20
100 / 100
564 ms41852 KiB
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; const int N = 1<<18; int Nxt[N][21], x[N], y[N]; map<int, vector<pair<int, int>>> mp; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n, m,k,q; cin>>n>>m>>k; vector<pair<int, int>> v1, v2; vector<int> v; for (int i=1;i<=k;i++){ cin>>x[i]>>y[i]; mp[x[i]].push_back({y[i], i}); v.push_back(x[i]); } sort(begin(v), end(v)); v.resize(unique(begin(v), end(v)) - begin(v)); for (int i : v) sort(begin(mp[i]), end(mp[i])); for (int i : v){ if (mp[i+1].size() == 0) continue; v1 = mp[i], v2 = mp[i+1]; for (auto [y, ind] : v1){ int u = upper_bound(v2.begin(), v2.end(), make_pair(y, 0)) - begin(v2); if (u < v2.size()) Nxt[ind][0] = v2[u].second; } } for (int j=0;j<20;j++){ for (int i=1;i<=k;i++) Nxt[i][j+1] = Nxt[Nxt[i][j]][j]; } cin>>q; for (int i=1;i<=q;i++){ int x1, x2, y1, y2; cin>>x1>>y1>>x2>>y2; if (x2 < x1 or y2 < y1){ cout<<"No\n"; continue; } if (x1 == x2){ cout<<"Yes\n"; continue; } int u = upper_bound(begin(mp[x1]), end(mp[x1]), make_pair(y1, 0)) - begin(mp[x1]); if (u == mp[x1].size()){ cout<<"No\n"; continue; } int id = mp[x1][u].second, d = x2 - x1 - 1; // cout<<id<<" "; for (int i=0;i<20;i++){ if ((1<<i) & d) id = Nxt[id][i];//, cout<<i<<'\n'; } // cout<<id<<endl; // cout<<y[id]<<" "<<y2<<endl; if (id == 0 or y[id] > y2) cout<<"No\n"; else cout<<"Yes\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...