제출 #692336

#제출 시각아이디문제언어결과실행 시간메모리
692336NeroZeinTrampoline (info1cup20_trampoline)C++14
11 / 100
710 ms40904 KiB
/* * author: NeroZein * created: 01.02.2023 13:03:54 */ #include <bits/stdc++.h> #define int long long using namespace std; #ifdef Nero #include "Deb.h" #else #define deb(...) #endif const int Log = 50; map<pair<int,int>, pair<int,int>> dp[Log]; signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int r, c, n; cin >> r >> c >> n; map<int, set<int>> se; vector<pair<int,int>> p(n); for (int i = 0; i < n; ++i) { pair<int,int> pp; cin >> pp.first >> pp.second; p[i] = pp; se[pp.first].insert(pp.second); } sort(p.begin(), p.end()); map<pair<int,int>, int> convert; for (int i = 0; i < n; ++i) { int x = p[i].first; int y = p[i].second; if (se[x-1].empty()) { continue; } auto it = se[x-1].upper_bound(y); if (it == se[x-1].begin()) { continue; } --it; dp[0][p[i]] = {x-1, *it}; } auto jump = [&](int x, int y, int k) { for (int j = 0; j < Log; ++j) { if ((k >> j) & 1) { auto pp = dp[j][{x, y}]; x = pp.first, y = pp.second; } } return make_pair(x, y); }; int q; cin >> q; while(q--) { int xs, ys, xf, yf; cin >> xs >> ys >> xf >> yf; if (xf < xs || yf < ys) { cout << "NO" << '\n'; continue; } if (xf == xs) { cout << "YES" << '\n'; continue; } auto it = se[xf-1].upper_bound(yf); if (se[xf-1].empty() || it == se[xf-1].begin()) { cout << "NO" << '\n'; continue; } --it; xf--; yf = *it; int dis = xf - xs; auto pp = jump(xf, yf, dis); xf = pp.first, yf = pp.second; cout << (xf == xs && yf >= ys ? "YES" : "NO") << '\n'; } 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...