Submission #1145923

#TimeUsernameProblemLanguageResultExecution timeMemory
1145923VMaksimoski008Trampoline (info1cup20_trampoline)C++20
100 / 100
459 ms40240 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int maxn = 2e5 + 5; int up[maxn][20]; signed main() { ios_base::sync_with_stdio(false); cout.tie(0); cin.tie(0); int n, m, k; cin >> n >> m >> k; vector<int> x(k+2), y(k+2, m+5); for(int i=1; i<=k+1; i++) for(int j=0; j<20; j++) up[i][j] = k + 1; map<int, vector<pii> > mp; for(int i=1; i<=k; i++) { cin >> x[i] >> y[i]; mp[x[i]].push_back({ y[i], i }); } for(auto &[r, vec] : mp) sort(vec.begin(), vec.end()); for(auto [r, vec] : mp) { for(auto [c, i] : vec) { int p = lower_bound(mp[r+1].begin(), mp[r+1].end(), pii{ c, 0 }) - mp[r+1].begin(); if(p != mp[r+1].size()) up[i][0] = mp[r+1][p].second; } } for(int j=1; j<20; j++) for(int i=1; i<=k+1; i++) up[i][j] = up[ up[i][j-1] ][j-1]; int q; cin >> q; while(q--) { int tr, tc, br, bc; cin >> tr >> tc >> br >> bc; if(tr > br || tc > bc) { cout << "No\n"; continue; } if(tr == br) { cout << "Yes\n"; continue; } int jmp = br - tr - 1; int p = lower_bound(mp[tr].begin(), mp[tr].end(), pii{ tc, 0 }) - mp[tr].begin(); if(p == mp[tr].size()) { cout << "No\n"; continue; } int u = mp[tr][p].second; for(int j=19; j>=0; j--) if(jmp & (1 << j)) u = up[u][j]; cout << (y[u] <= bc ? "Yes" : "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...