Submission #680076

#TimeUsernameProblemLanguageResultExecution timeMemory
680076LucaLucaMTrampoline (info1cup20_trampoline)C++17
100 / 100
358 ms29244 KiB
#include <bits/stdc++.h> using namespace std; map<int, vector<int>>lin; #define YES cout << "Yes\n" #define NO cout << "No\n" int n; int nxt[200005][19]; /// nxt[i] - urmatoarea trambulina dupa a[i] struct trambulina { int x, y; bool operator < (const trambulina aux) const { if (x == aux.x) return y < aux.y; return x < aux.x; } }; trambulina a[200005]; int after_jump (int x, int y) { int l=1, r=n; int sol = n + 1; while (l <= r) { int mid = (l + r) / 2; if (a[mid].x < x) l = mid + 1 ; else if (a[mid].x > x) r = mid - 1; else { if (a[mid].y >= y) sol = mid, r = mid-1; else l = mid + 1; } } return sol; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int r, c; cin >> r >> c >> n; for (int i=1; i<=n; i++) cin >> a[i].x >> a[i].y; sort(a+1, a+n+1); a[++n] = {r+1, c+1}; /** nxt[i] - urmatoarea trambulina **/ for (int i=1; i<=n; i++) { nxt[i][0] = after_jump(a[i].x+1, a[i].y); } for (int j=1; (1 << j) < n; j++) { for (int i=1; i<n; i++) { nxt[i][j] = nxt[nxt[i][j-1]][j-1]; } } int t; cin >> t; while (t--) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; if (x1 > x2 || y1 > y2 || x2 - x1 > n) { NO; continue; } else if (x1 == x2) YES; else { int d = x2 - x1 - 1; int pos = after_jump(x1, y1); if (a[pos].x != x1) { NO; continue; } for (int b=0; b<18; b++) { if (d & (1 << b)) { pos = nxt[pos][b]; } } if (pos >= n) { NO; continue; } if (a[pos].x + 1 == x2 && a[pos].y <= y2) YES; else NO; } } 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...