Submission #1236225

#TimeUsernameProblemLanguageResultExecution timeMemory
1236225MarwenElarbiLong Mansion (JOI17_long_mansion)C++20
25 / 100
566 ms52324 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second const int nax=5e5+5; int lst[nax]; int main() { int n; cin>>n; vector<int> tab[2*n]; for (int i = 0; i < n-1; ++i) { int x; cin>>x; tab[i*2+1].push_back(x); } for (int i = 0; i < n; ++i) { int x; cin>>x; for (int j = 0; j < x; ++j) { int y; cin>>y; tab[i*2].push_back(y); } } for (int i = 0; i < nax; ++i) lst[i]=-1; vector <pair<pair<int,int>,int>> cnt; for (int i = 0; i < 2*n-1; ++i) { if(i%2){ cnt.push_back({{i,0},lst[tab[i][0]]}); }else{ for(auto u:tab[i]) { lst[u]=i; } } } for (int i = 0; i < 2*n-1; ++i) lst[i]=2*n-1; for (int i = 2*n-2; i >= 0; --i) { if(i%2){ cnt.push_back({{lst[tab[i][0]],2},i}); cnt.push_back({{i,1},lst[tab[i][0]]}); }else{ for(auto u:tab[i]) lst[u]=i; } } cnt.push_back({{-1,1},2*n-1}); cnt.push_back({{2*n-1,0},-1}); sort(cnt.begin(),cnt.end()); stack<int> cur; set<pair<int,int>> st; vector<pair<int,int>> ans(n*2); int j=-1; for (int i = 0; i < cnt.size(); ++i) { while(j<=cnt[i].fi.fi){ if(j%2==0) cur.push(j); j++; } if(cnt[i].fi.se==2){ st.erase({cnt[i].se,cnt[i].fi.fi}); }else if(cnt[i].fi.se==1) { st.insert({cnt[i].fi.fi,cnt[i].se}); }else{ while(!cur.empty()){ pair<int,int> x= *--st.lower_bound(make_pair(cur.top(),0)); if(x.fi<cnt[i].se) break; ans[cur.top()]={x.fi,cnt[i].fi.fi}; cur.pop(); } } } int q; cin>>q; for (int i = 0; i < q; ++i) { int l,r; cin>>l>>r; l--;r--;l*=2;r*=2; if(ans[l].fi<=r&&r<=ans[l].se) cout <<"YES"<<endl; else cout <<"NO"<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...