Submission #1276641

#TimeUsernameProblemLanguageResultExecution timeMemory
1276641SmuggingSpunLong Mansion (JOI17_long_mansion)C++20
10 / 100
94 ms6908 KiB
#include<bits/stdc++.h>
#define taskname "B"
using namespace std;
const int lim = 5e5 + 5;
int n, q, c[lim];
vector<int>a[lim];
namespace sub12{
	void solve(){
		vector<int>l(n + 1), r(n + 1);
		for(int i = 1; i <= n; i++){
			bitset<lim>vis;
			vis.reset();
			for(int& v : a[i]){
				vis[v] = true;
			}
			l[i] = r[i] = i;
			while((l[i] > 1 && vis[c[l[i] - 1]]) || (r[i] < n && vis[c[r[i]]])){
				while(l[i] > 1 && vis[c[l[i] - 1]]){
					l[i]--;
					for(int& v : a[l[i]]){
						vis[v] = true;
					}
				}
				while(r[i] < n && vis[c[r[i]]]){
					r[i]++;
					for(int& v : a[r[i]]){
						vis[v] = true;
					}
				}
			}
		}
		for(int _ = 0; _ < q; _++){
			int x, y;
			cin >> x >> y;			
			cout << (l[x] <= y && r[x] >= y ? "YES\n" : "NO\n");
		}
	}
}
namespace sub34{
	void solve(){
		
	}
}
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	if(fopen(taskname".inp", "r")){
		freopen(taskname".inp", "r", stdin);
	}
	cin >> n;
	for(int i = 1; i < n; i++){
		cin >> c[i];
	}
	int sum_b = 0;
	for(int i = 1; i <= n; i++){
		int k;
		cin >> k;
		for(int j = 0; j < k; j++){
			int x;
			cin >> x;
			a[i].push_back(x);
		}
		sum_b += k;
	}
	cin >> q;
	if(n <= 5000 && sum_b <= 5000){
		sub12::solve();
	}
	else{
		sub34::solve();
	}
}

Compilation message (stderr)

long_mansion.cpp: In function 'int main()':
long_mansion.cpp:47:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |                 freopen(taskname".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...