Submission #1231809

#TimeUsernameProblemLanguageResultExecution timeMemory
1231809AishaTrampoline (info1cup20_trampoline)C++20
42 / 100
2096 ms66748 KiB
#include "bits/stdc++.h" using namespace std; #define int long long signed main() { int r, c, n; cin >> r >> c >> n; vector <int> a(n); vector <int> b(n); for (int i = 0; i < n; i ++) cin >> a[i] >> b[i]; set <pair <int, int>> st; for (int i = 0; i < n; i ++) st.insert({a[i], b[i]}); map <pair <int, int>, vector <pair <int, int>>> g; vector <int> x1; vector <int> x2; int x_f = -1, x_s = -1; for (auto [i, j] : st) { if (x_f == -1) { x_f = i; x1.push_back(j); continue; } if (i == x_f) { //g[{i, j}].push_back({x_f, x1.back()}); g[{x_f, x1.back()}].push_back({i, j}); x1.push_back(j); continue; } if (x_s == -1 && i == x_f + 1) { x_s = i; x2.push_back(j); int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin(); if (ind == 0) continue; ind --; // g[{i, j}].push_back({x_f, x1[ind]}); g[{x_f, x1[ind]}].push_back({i, j}); continue; } if (x_s == -1) { x1.clear(); x_f = i; x1.push_back(j); continue; } if (x_s == i) { // g[{i, j}].push_back({x_s, x2.back()}); g[{x_s, x2.back()}].push_back({i, j}); int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin(); if (ind == 0) continue; ind --; // g[{i, j}].push_back({x_f, x1[ind]}); g[{x_f, x1[ind]}].push_back({i, j}); continue; } if (x_s + 1 == i) { x_f = x_s; x1.swap(x2); x2.clear(); x_s = i; x2.push_back(j); int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin(); if (ind == 0) continue; ind --; // g[{i, j}].push_back({x_f, x1[ind]}); g[{x_f, x1[ind]}].push_back({i, j}); continue; } if (x_s + 1 < i) { x1.clear(); x2.clear(); x_s = -1; x_f = i; x1.push_back(j); continue; } } /* // Graph for (auto [ind, v] : g) { int x = ind.first; int y = ind.second; cout << "x =, y = " << x << ' ' << y << endl; for (auto [i, j] : v) { cout << i << ' ' << j << endl; } cout << endl; } // */ map <pair <int, int>, int> vis; map <pair <int, int>, int> col; int cnt = 0; auto bfs = [&] (int i, int j) -> void { cnt ++; queue <pair <int, int>> q; q.push({i, j}); vis[{i, j}] = 1; col[{i, j}] = cnt; while (!q.empty()) { i = q.front().first, j = q.front().second; q.pop(); for (auto [x, y] : g[{i, j}]) { if (vis[{x, y}]) continue; vis[{x, y}] = 1; col[{x, y}] = cnt; q.push({x, y}); } } }; for (auto [i, j] : st) { if (vis[{i, j}]) continue; bfs(i, j); } int t; cin >> t; while (t --) { int sx, sy, ex, ey; cin >> sx >> sy >> ex >> ey; int x = sx, y = sy; for (auto [i, j] : st) { if (i < x || j < y) continue; if (i > x) break; // i == x if (j <= ey && x < ex) y = j, x ++; } if (x == ex && y <= ey) cout << "Yes" << endl; else cout << "No" << endl; } 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...