제출 #1305662

#제출 시각아이디문제언어결과실행 시간메모리
1305662vako_pLong Mansion (JOI17_long_mansion)C++20
10 / 100
3095 ms17488 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define sd second #define debug(x) cerr << #x << " -----> " << x << endl; //#pragma GCC optimize("O3") //#pragma GCC optimize("Ofast") //#pragma GCC optimize("unroll-loops") const int mxN = 1e6 + 5; ll n,l[mxN],r[mxN],lf[mxN],rt[mxN],L[mxN],R[mxN],b[mxN],c[mxN]; vector<ll> a[mxN]; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; for(int i = 1; i <= n - 1; i++) cin >> c[i]; vector<vector<ll>> v(n + 5); for(int i = 1; i <= n; i++){ cin >> b[i]; a[i].resize(b[i]); for(int j = 0; j < b[i]; j++){ cin >> a[i][j]; v[a[i][j]].pb(i); } } for(int i = 1; i <= n - 1; i++){ bool ok = false; r[i] = n + 1; auto it = upper_bound(v[c[i]].begin(), v[c[i]].end(), i); if(it != v[c[i]].end()) r[i] = *it; if(it != v[c[i]].begin()) l[i] = *(--it); } for(int i = 1; i <= n - 1; i++){ lf[i] = n + 1; rt[i] = 0; if(r[i] < n + 1) for(int j = i + 1; j <= n - 1; j++){ if(r[i] > j and l[j] <= i){ rt[i] = j; } } else rt[i] = n + 1; if(l[i]) for(int j = i - 1; j >= 1; j--){ if(l[i] <= j and r[j] > i){ lf[i] = j; } } else lf[i] = 0; } for(int i = 1; i <= n; i++){ R[i] = n + 1; for(int j = i; j < n; j++){ if(lf[j] < i){ R[i] = j; break; } } for(int j = i - 1; j > 0; j--){ if(rt[j] >= i){ L[i] = j + 1; break; } } // cout << L[i] << ' ' << R[i] << '\n'; } ll q; cin >> q; while(q--){ ll x,y,lx,rx; cin >> x >> y; if(y >= L[x] and y <= R[x]) cout << "YES" << '\n'; else cout << "NO" << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...