답안 #909197

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
909197 2024-01-17T06:09:58 Z IBory Long Mansion (JOI17_long_mansion) C++17
0 / 100
135 ms 33736 KB
#include <bits/stdc++.h>
#define pii pair<int, int>
using namespace std;

const int SZ = 1 << 19;
int C[SZ], L[SZ], R[SZ];
pii E[SZ];
vector<int> K[SZ];

int main() {
	ios::sync_with_stdio(0); cin.tie(0);
	int N, Q;
	cin >> N;
	for (int i = 1; i < N; ++i) cin >> C[i];
	for (int i = 1; i <= N; ++i) {
		int M;
		cin >> M;
		K[i].resize(M);
		for (int& n : K[i]) cin >> n;
	}

	vector<int> in(N + 1);
	for (int i = 1; i < N; ++i) {
		for (int k : K[i]) in[k] = i;
		L[i] = in[C[i]];
	}
	fill(in.begin(), in.end(), N + 1);
	for (int i = N - 1; i > 0; --i) {
		for (int k : K[i + 1]) in[k] = i + 1;
		R[i] = in[C[i]];
	}
	R[0] = R[N] = N + 1, L[0] = L[N] = 0;

	// for (int i = 0; i <= N; ++i) {
	// 	cout << "Door: " << L[i] << ' ' << R[i] << '\n';
	// }
	// cout << '\n';

	fill(E, E + SZ, pii{1, -N});

	for (int i = 1; i <= N; ++i) {
		vector<int> go;
		for (int j = L[i]; j < i; ++j) {
			if (i < R[j]) go.push_back(j);
		}

		if (go.empty()) continue;
		int a = go.back(); go.pop_back();
		for (int p = a + 1; p <= i; ++p) E[p] = max(E[p], pii{a + 1, -i});

		if (go.empty()) continue;
		a = go.back(); go.pop_back();
		for (int p = a + 1; p <= i; ++p) E[p] = max(E[p], pii{a + 1, -i});
	}

	for (int i = 0; i < N; ++i) {
		vector<int> go;
		for (int j = R[i] - 1; j > i; --j) {
			if (L[j] <= i) go.push_back(j);
		}

		if (go.empty()) continue;
		int a = go.back(); go.pop_back();
		for (int p = i + 1; p <= a; ++p) E[p] = max(E[p], pii{i + 1, -a});

		if (go.empty()) continue;
		a = go.back(); go.pop_back();
		for (int p = i + 1; p <= a; ++p) E[p] = max(E[p], pii{i + 1, -a});
	}


	// cout << '\n';
	// for (int i = 1; i <= N; ++i) {
	// 	cout << "Bottleneck: " << E[i].first << ' ' << -E[i].second << '\n';
	// }

	cin >> Q;
	while (Q--) {
		int x, y;
		cin >> x >> y;
		bool can = E[x].first <= y && y <= -E[x].second;
		cout << (can ? "YES" : "NO") << '\n';
	}
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 21080 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 21080 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 135 ms 33736 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 21080 KB Output isn't correct
2 Halted 0 ms 0 KB -