Submission #1106705

#TimeUsernameProblemLanguageResultExecution timeMemory
1106705inksamuraiPassport (JOI23_passport)C++17
48 / 100
1230 ms1048576 KiB
#include <bits/stdc++.h> #define int ll using namespace std; #define rep(i,n) for(int i=0;i<n;i++) #define per(i,n) for(int i=n-1;i>=0;i--) #define rng(i,c,n) for(int i=c;i<n;i++) #define fi first #define se second #define pb push_back #define sz(a) (int) a.size() #define all(a) a.begin(),a.end() #define vec(...) vector<__VA_ARGS__> #define _3M8yqhy ios::sync_with_stdio(0),cin.tie(0) typedef long long ll; typedef vector<int> vi; typedef pair<int,int> pii; void print(){cout<<'\n';} template<class h,class...t> void print(const h&v,const t&...u){cout<<v<<' ',print(u...);} const int inf=1e9; void slv(){ int n; cin>>n; vec(pii) a; rep(i,n){ int l,r; cin>>l>>r; l-=1,r-=1; a.pb({l,r}); } vi pns(n,inf); // 12 way rep(t,2){ vi d1(n,inf); { vec(vi) adj(n); rep(i,n){ rng(j,a[i].fi,a[i].se+1){ adj[j].pb(i); } } queue<int> que; rep(v,n){ if(a[v].fi==0){ d1[v]=1; que.push(v); } } while(sz(que)){ int v=que.front(); que.pop(); for(auto u:adj[v]){ if(d1[u]==inf){ d1[u]=d1[v]+1; que.push(u); } } } } vi d12(n,inf); { vec(vi) adj(n); rep(i,n){ rng(j,0,a[i].se+1){ adj[j].pb(i); } } priority_queue<pii,vec(pii),greater<pii>> pq; rep(v,n){ if(a[v].se==n-1){ d12[v]=1; pq.push({d12[v],v}); } } while(sz(pq)){ auto [cosu,v]=pq.top(); pq.pop(); for(auto u:adj[v]){ if(d12[u]>d12[v]+1){ // if(u==n-1-3 and t==1) print(v,dp[v]); d12[u]=d12[v]+1; pq.push({d12[u],u}); } } } rng(v,1,n-1){ d12[v]+=d1[v]-1; } d12[n-1]=d1[n-1]; } // if(t==1 and s==n-1-3) print("wtf",i,r,cnt); vi dp(n,inf); dp=d12; { vec(vi) adj(n); rep(i,n){ rng(j,a[i].fi,a[i].se+1){ adj[j].pb(i); } } priority_queue<pii,vec(pii),greater<pii>> pq; rep(v,n){ pq.push({dp[v],v}); } while(sz(pq)){ auto [cosu,v]=pq.top(); pq.pop(); for(auto u:adj[v]){ if(dp[u]>dp[v]+1){ // if(u==n-1-3 and t==1) print(v,dp[v]); dp[u]=dp[v]+1; pq.push({dp[u],u}); } } } } // if(t==1){ // print(dp[n-1-3],d1[n-1-3]); // } rep(v,n){ dp[v]=min(dp[v],d12[v]); if(!t){ pns[v]=min(pns[v],dp[v]); }else{ pns[n-1-v]=min(pns[n-1-v],dp[v]); } } rep(i,n){ a[i].fi=n-1-a[i].fi; a[i].se=n-1-a[i].se; swap(a[i].fi,a[i].se); } reverse(all(a)); } int q; cin>>q; rep(i,q){ int x; cin>>x; x-=1; print(pns[x]==inf?-1:pns[x]); } } signed main(){ _3M8yqhy; slv(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...