Submission #1305642

#TimeUsernameProblemLanguageResultExecution timeMemory
1305642vako_pLong Mansion (JOI17_long_mansion)C++20
5 / 100
3094 ms11436 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]; 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]; } for(int i = 1; i <= n - 1; i++){ bool ok = false; r[i] = n + 1; for(int j = i; j > 0; j--){ for(auto it : a[j]) if(it == c[i]) ok = true; if(ok){ l[i] = j; break; } } ok = false; for(int j = i + 1; j <= n; j++){ for(auto it : a[j]) if(it == c[i]) ok = true; if(ok){ r[i] = j; break; } } } for(int i = 1; i <= n - 1; i++){ lf[i] = n + 1; rt[i] = 0; for(int j = i + 1; j <= n - 1; j++){ if(r[i] > j and l[j] <= i) rt[i] = j; } for(int j = i - 1; j >= 1; j--){ if(l[i] <= j and r[j] > i) lf[i] = j; } } for(int i = 1; i <= n; i++){ R[i] = n + 1; for(int j = i; j < n; j++){ if(!l[j] or lf[j] < i){ R[i] = j; break; } } for(int j = i - 1; j > 0; j--){ if(r[j] == n + 1 or 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; lx = rx = x; vector<bool> vis(n + 5, false); for(auto it : a[x]) vis[it] = true; while(lx > y or rx < y){ bool ok = true; if(lx > 1){ if(vis[c[lx - 1]]){ lx--; for(auto it : a[lx]) vis[it] = true; ok = false; } } if(rx < n){ if(vis[c[rx]]){ rx++; for(auto it : a[rx]) vis[it] = true; ok = false; } } if(ok) break; } // cout << x << ' ' << y << ' ' << L[x] << ' ' << R[x] << '\n'; if(y >= lx and y <= rx) cout << "YES" << '\n'; else cout << "NO" << '\n'; // 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...