Submission #1016304

#TimeUsernameProblemLanguageResultExecution timeMemory
1016304AiperiiiRailway Trip 2 (JOI22_ho_t4)C++14
8 / 100
2093 ms8532 KiB
#include <bits/stdc++.h> //#define int long long #define all(x) x.begin(),x.end() #define ff first #define ss second #define pb push_back using namespace std; const int N=1e5+5; int L[N],R[N]; int t_l[N*4],t_r[N*4]; void update_r(int v,int tl,int tr,int l,int r,int x){ if(r<tl or tr<l)return; if(l<=tl && tr<=r){ t_r[v]=max(t_r[v],x); return; } int tm=(tl+tr)/2; update_r(v*2,tl,tm,l,r,x); update_r(v*2+1,tm+1,tr,l,r,x); } int get_r(int v,int tl,int tr,int pos){ if(tl==tr)return t_r[v]; int tm=(tl+tr)/2; if(pos<=tm)return max(t_r[v],get_r(v*2,tl,tm,pos)); else return max(t_r[v],get_r(v*2+1,tm+1,tr,pos)); } void build(int v,int tl,int tr){ t_l[v]=1e9; if(tl!=tr){ int tm=(tl+tr)/2; build(v*2,tl,tm); build(v*2+1,tm+1,tr); } } void update_l(int v,int tl,int tr,int l,int r,int x){ if(r<tl or tr<l)return; if(l<=tl && tr<=r){ t_l[v]=min(t_l[v],x); return; } int tm=(tl+tr)/2; update_l(v*2,tl,tm,l,r,x); update_l(v*2+1,tm+1,tr,l,r,x); } int get_l(int v,int tl,int tr,int pos){ if(tl==tr)return t_l[v]; int tm=(tl+tr)/2; if(pos<=tm)return min(t_l[v],get_l(v*2,tl,tm,pos)); else return min(t_l[v],get_l(v*2+1,tm+1,tr,pos)); } queue <int> q; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n,k; cin>>n>>k; int m; cin>>m; build(1,1,n); for(int i=1;i<=m;i++){ int a,b; cin>>a>>b; if(a<b){ update_r(1,1,n,a,min(b-1,a+k-1),b); } else{ update_l(1,1,n,max(b+1,a-k+1),a,b); } } for(int i=1;i<=n;i++){ R[i]=max(i,get_r(1,1,n,i)); L[i]=min(i,get_l(1,1,n,i)); } int Q; cin>>Q; while(Q--){ int s,t; cin>>s>>t; vector <int> d(n+1,-1),vis(n+1); d[s]=0; q.push(s); vis[s]=1; set <int> st; for(int i=1;i<=n;i++)st.insert(i); st.erase(s); while(!q.empty()){ int v=q.front(); q.pop(); int mn=1e9,mx=0; int mxr=-1,mnl=-1; auto it=st.lower_bound(L[v]); auto it2=st.upper_bound(R[v]); while(it!=it2){ int i=*it; if(d[i]==-1){ d[i]=d[v]+1; } if(L[i]<mn){ mn=L[i]; mnl=i; } if(R[i]>mx){ mx=R[i]; mxr=i; } it++; } if(mxr!=-1 && !vis[mxr]){ vis[mxr]=1; st.erase(mxr); q.push(mxr); } if(mnl!=-1 && !vis[mnl]){ vis[mnl]=1; st.erase(mnl); q.push(mnl); } } cout<<d[t]<<"\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...