Submission #698583

#TimeUsernameProblemLanguageResultExecution timeMemory
698583hazzleTrampoline (info1cup20_trampoline)C++17
42 / 100
2092 ms46088 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define fi first #define se second #define all(m) (m).begin(), (m).end() #define rall(m) (m).rbegin(), (m).rend() #define vec vector #define sz(a) (int) (a).size() #define mpp make_pair #define mtt make_tuple typedef long long ll; typedef long double ld; typedef unsigned long long ull; typedef pair <int, int> pii; typedef tuple <int, int, int> tui; template <typename T> bool umin(T &a, T b) { return a > b ? a = b, 1 : 0; } template <typename T> bool umax(T &a, T b) { return a < b ? a = b, 1 : 0; } const int N = 2e5 + 42, L = 18; const int inf = 1e9 + 42; bool dbg = 1; int solve(){ int r, c, n; cin >> r >> c >> n; vec <pii> a(n); map <pii, int> id; map <int, vec <int>> v; vec <int> xs(n); for (int i = 0; i < n; ++i){ auto &[x, y] = a[i]; cin >> x >> y; id[{x, y}] = i; v[x].push_back(y); xs[i] = x; } for (auto &[x, c]: v) sort(all(c)); auto nxt = [&](int x, int y){ if (v[x].empty()) return -1; auto it = lower_bound(all(v[x]), y); return it == v[x].end() ? -1 : id[mpp(x, *it)]; }; vec <int> go(n, -1); for (int i = 0; i < n; ++i){ auto [x, y] = a[i]; if (~nxt(x + 1, y)){ go[i] = nxt(x + 1, y); } else if (~nxt(x, y + 1)){ go[i] = nxt(x, y + 1); } } vec <vec <int>> up(n, vec <int> (L, -1)); sort(rall(xs)); for (auto &x: xs){ for (int pt = sz(v[x]) - 1; ~pt; --pt){ int y = v[x][pt]; int u = id[{x, y}], v = go[u]; if (!~v) continue; if (a[u].fi + 1 == a[v].fi){ up[u][0] = v; int cv = up[v][0]; for (int l = 1; l < L; ++l){ if (!~cv) break; up[u][l] = cv, cv = up[cv][l]; } } else up[u] = up[v]; } } int q; cin >> q; while(q--){ int sx, sy, tx, ty; cin >> sx >> sy >> tx >> ty; if (tx < sx || ty < sy){ cout << "No\n"; continue; } if (sx == tx){ cout << "Yes\n"; continue; } int u = nxt(sx, sy); int dst = tx - sx - 1; if (dst >= n){ cout << "No\n"; continue; } for (int l = 0; l < L; ++l){ if (!~u) break; if (dst >> l & 1){ u = up[u][l]; } } cout << (!~u || a[u].se > ty ? "No\n" : "Yes\n"); } return 0; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tst = 1; //cin >> tst; while(tst--) solve(); 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...