Submission #1307124

#TimeUsernameProblemLanguageResultExecution timeMemory
1307124vtnooRailway Trip 2 (JOI22_ho_t4)C++20
25 / 100
224 ms37304 KiB
#include <bits/stdc++.h> #define pb push_back #define fst first #define snd second #define fore(i,a,b) for(int i=a,pao=b;i<pao;++i) #define SZ(x) ((int)x.size()) #define ALL(x) x.begin(),x.end() #define me(a,v) memset((a),(v),sizeof(a)) #define FIN ios::sync_with_stdio(0);cin.tie(0);cout.tie(0) using namespace std; typedef long long ll; const int MAXM=2e5+5,MAXN=1e5+5,LOG=18,INF=1e9; int A[MAXM],B[MAXM],L[MAXN],R[MAXN],upl[MAXN][LOG],upr[MAXN][LOG]; void chmin(int &a,int b){ if(a>b)a=b; } void chmax(int &a,int b){ if(a<b)a=b; } int jump(int a,int k,int r){ fore(i,0,LOG){ if((1<<i)&k){ if(r)a=upr[a][i]; else a=upl[a][i]; } } return a; } int main(){FIN; int n,k;cin>>n>>k; int m;cin>>m; fill(L,L+n,INF); fill(R,R+n,-INF); vector<vector<int>>add(n),rem(n); vector<vector<int>>add2(n),rem2(n); fore(i,0,m){ cin>>A[i]>>B[i]; A[i]--;B[i]--; if(A[i]<B[i]){ add[A[i]].pb(B[i]); if(min(A[i]+k,B[i]+1)<n)rem[min(A[i]+k,B[i]+1)].pb(B[i]); }else{ add2[A[i]].pb(B[i]); if(max(A[i]-k,B[i]-1)>=0)rem2[max(A[i]-k,B[i]-1)].pb(B[i]); } } multiset<int>s; fore(i,0,n){ if(!s.empty())for(auto x:rem[i])s.erase(s.find(x)); for(auto x:add[i])s.insert(x); if(!s.empty())chmax(R[i],*s.rbegin()); } s.clear(); for(int i=n-1;i>=0;i--){ if(!s.empty())for(auto x:rem2[i])s.erase(s.find(x)); for(auto x:add2[i])s.insert(x); if(!s.empty())chmin(L[i],*s.begin()); } fore(i,0,LOG){ fore(j,0,n){ if(i==0){ upr[j][0]=R[j]==-INF?j:R[j]; upl[j][0]=L[j]==INF?j:L[j]; continue; } upr[j][i]=upr[upr[j][i-1]][i-1]; upl[j][i]=upl[upl[j][i-1]][i-1]; } } int Q;cin>>Q; while(Q--){ int s,t;cin>>s>>t;s--;t--; int l=-1,r=INF; int caso=s<t?1:0; if(caso){ while(r-l>1){ int m=(r+l)/2; if(jump(s,m,caso)>=t){ r=m; }else l=m; } if(r==INF)cout<<-1<<endl; else cout<<r<<endl; } else{ while(r-l>1){ int m=(r+l)/2; if(jump(s,m,caso)<=t){ r=m; }else l=m; } if(r==INF)cout<<-1<<endl; else cout<<r<<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...
#Verdict Execution timeMemoryGrader output
Fetching results...