Submission #1261783

#TimeUsernameProblemLanguageResultExecution timeMemory
1261783chikien2009Long Mansion (JOI17_long_mansion)C++20
100 / 100
144 ms46332 KiB
#include <bits/stdc++.h> using namespace std; void setup() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int n, q, a, x; int c[500000], ln[500000], rn[500000], last[500000], l[500000], r[500000]; bool check[500000]; vector<int> b[500000]; inline void Form(int inp) { if (!check[inp]) { check[inp] = true; while (true) { if (l[inp] > 0 && l[inp] && rn[l[inp] - 1] <= r[inp]) { Form(l[inp] - 1); r[inp] = max(r[inp], r[l[inp] - 1]); l[inp] = min(l[inp], l[l[inp] - 1]); } else if (r[inp] + 1 < n && l[inp] <= ln[r[inp] + 1]) { Form(r[inp] + 1); l[inp] = min(l[inp], l[r[inp] + 1]); r[inp] = max(r[inp], r[r[inp] + 1]); } else { break; } } } } int main() { setup(); cin >> n; for (int i = 0; i < n - 1; ++i) { cin >> c[i]; c[i]--; } fill_n(last, 500000, -1); for (int i = 0; i < n; ++i) { cin >> a; l[i] = r[i] = i; b[i].resize(a); ln[i] = (i == 0 || last[c[i - 1]] == -1 ? -1 : last[c[i - 1]]); for (int j = 0; j < a; ++j) { cin >> b[i][j]; b[i][j]--; last[b[i][j]] = i; } } fill_n(last, 500000, -1); for (int i = n - 1; i >= 0; --i) { rn[i] = (i == n - 1 || last[c[i]] == -1 ? 1e9 : last[c[i]]); for (auto &j : b[i]) { last[j] = i; } } for (int i = 0; i < n; ++i) { Form(i); } cin >> q; while (q--) { cin >> a >> x; a--; x--; cout << (l[a] <= x && x <= r[a] ? "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...