제출 #1262264

#제출 시각아이디문제언어결과실행 시간메모리
1262264ereringPassport (JOI23_passport)C++20
100 / 100
845 ms172032 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define pb push_back const int N=2e5+5,inf=1e18; int n; pair<int,int> p[N]; vector<pair<int,int>> rev[N*4]; int offset=1,sol[N*4][3]; void build(int node,int lo,int hi){ if(lo==hi)return; rev[node*2].pb({node,0}); rev[node*2+1].pb({node,0}); int mid=(lo+hi)/2; build(node*2,lo,mid); build(node*2+1,mid+1,hi); } void query(int node,int qlo,int qhi,int lo,int hi,int id){ if(lo>=qlo && hi<=qhi){ rev[node].pb({id,1}); return; } if(lo>qhi || hi<qlo)return; int mid=(lo+hi)/2; query(node*2,qlo,qhi,lo,mid,id); query(node*2+1,qlo,qhi,mid+1,hi,id); } void solve(int type,int start){ priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq; for(int i=0;i<N*4;i++){ pq.push({sol[i][type],i}); } while(!pq.empty()){ int score=pq.top().first,node=pq.top().second; // if(type==1)cout<<score<<' '<<node<<endl; pq.pop(); if(sol[node][type]<score)continue; for(auto i:rev[node]){ int x=i.first; if(sol[x][type]>score+i.second){ pq.push({score+i.second,x}); sol[x][type]=score+i.second; } } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(int i=0;i<3;i++){ for(int j=0;j<N*4;j++)sol[j][i]=inf; } cin>>n; while(offset<=n)offset*=2; build(1,0,offset-1); for(int i=1;i<=n;i++){ cin>>p[i].first>>p[i].second; if(p[i].first==1)sol[i+offset][0]=0; if(p[i].second==n)sol[i+offset][1]=0; query(1,p[i].first,p[i].second,0,offset-1,i+offset); } solve(0,1+offset); solve(1,n+offset); for(int i=1;i<=n;i++)sol[i+offset][2]=sol[i+offset][0]+sol[i+offset][1]+1; // cout<<sol[1+offset][1]<<endl; solve(2,313); int q; cin>>q; while(q--){ int x; cin>>x; x+=offset; cout<<(sol[x][2]>n?-1:sol[x][2])<<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...
#Verdict Execution timeMemoryGrader output
Fetching results...