Submission #1182196

#TimeUsernameProblemLanguageResultExecution timeMemory
1182196skibidisigmabartuss69Long Mansion (JOI17_long_mansion)C++20
100 / 100
152 ms43120 KiB
#include <bits/stdc++.h> using namespace std; #define ll int64_t #define ull unsigned long long #define vi vector<int> #define vll vector<int64_t> #define vpi vector<pair<int, int>> #define iter const auto& #define all(v) (v).begin(), (v).end() void Solve() { int n; cin >> n; vi door_keys(n - 1); for (int i = 0; i < n - 1; i++) { cin >> door_keys[i]; } vector<vi> sector_keys(n); vi key_count(n); for (int i = 0; i < n; i++) { cin >> key_count[i]; sector_keys[i].resize(key_count[i]); for (int j = 0; j < key_count[i]; j++) { cin >> sector_keys[i][j]; } } vi last_occurrence(n + 1, 0); vi left_boundary(n + 1); for (int i = 1; i <= n - 1; i++) { for (iter key : sector_keys[i - 1]) { last_occurrence[key] = i; } left_boundary[i] = last_occurrence[door_keys[i - 1]]; } fill(all(last_occurrence), n + 1); vi right_boundary(n + 1); for (int i = n; i >= 2; i--) { for (iter key : sector_keys[i - 1]) { last_occurrence[key] = i; } right_boundary[i - 1] = last_occurrence[door_keys[i - 2]]; } vi left_reach(n + 1), right_reach(n + 1); for (int i = 1; i <= n; i++) { left_reach[i] = right_reach[i] = i; while (true) { bool changed = false; if (left_reach[i] > 1 && right_boundary[left_reach[i] - 1] <= right_reach[i]) { right_reach[i] = max(right_reach[i], right_reach[left_reach[i] - 1]); left_reach[i] = min(left_reach[i], left_reach[left_reach[i] - 1]); changed = true; } if (right_reach[i] < n && left_reach[i] <= left_boundary[right_reach[i]]) { right_reach[i]++; changed = true; } if (!changed) break; } } int q; cin >> q; while (q--) { int start, target; cin >> start >> target; if (left_reach[start] <= target && target <= right_reach[start]) { cout << "YES\n"; } else { cout << "NO\n"; } } } int main() { cin.tie(0)->sync_with_stdio(0); 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...