제출 #1145928

#제출 시각아이디문제언어결과실행 시간메모리
1145928VMaksimoski008Trampoline (info1cup20_trampoline)C++20
100 / 100
741 ms40308 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; const int maxn = 2e5 + 5; int up[maxn][20]; int lb(vector<pii> &V, pii x) { return lower_bound(V.begin(), V.end(), x) - V.begin(); } int main() { 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 = lb(mp[r+1], pii{ c, 0 }); 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 = lb(mp[tr], pii{ tc, 0 }); 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...