Submission #527825

#TimeUsernameProblemLanguageResultExecution timeMemory
527825JasiekstrzRailway Trip 2 (JOI22_ho_t4)C++17
100 / 100
375 ms66920 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int N=1e5; const int L=20; const int P=(1<<17); struct Seg { int l,r; }; Seg operator+(Seg a,Seg b) { return {min(a.l,b.l),max(a.r,b.r)}; } vector<int> ev[N+10]; multiset<int> ms; Seg jmp[N+10][L+2]; int pot; Seg tr[L+2][2*P+10]; void buildtr(int n,int l) { for(int i=1;i<=n;i++) tr[l][pot+i-1]=jmp[i][l]; for(int i=pot-1;i>0;i--) tr[l][i]=tr[l][2*i]+tr[l][2*i+1]; return; } Seg read(int it,int l,int r) { Seg ans={N+1,0}; for(l+=pot-1,r+=pot-1;l<=r;l/=2,r/=2) { if(l%2==1) ans=ans+tr[it][l++]; if(r%2==0) ans=ans+tr[it][r--]; } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,k,m,q; cin>>n>>k>>m; for(int i=1;i<=m;i++) { int a,b; cin>>a>>b; if(a<b) { ev[a].push_back(b); ev[min(a+k,b+1)].push_back(-b); } else { ev[max(a-k+1,b)].push_back(b); ev[a+1].push_back(-b); } } for(int i=1;i<=n;i++) { for(auto v:ev[i]) { if(v>0) ms.insert(v); else ms.erase(ms.find(-v)); } if(ms.empty()) jmp[i][0]={i,i}; else jmp[i][0]={min(i,*ms.begin()),max(i,*prev(ms.end()))}; //cerr<<i<<": "<<jmp[i][0].l<<" "<<jmp[i][0].r<<"\n"; } for(pot=1;pot<n;pot*=2); buildtr(n,0); for(int l=1;l<=L;l++) { for(int i=1;i<=n;i++) jmp[i][l]=read(l-1,jmp[i][l-1].l,jmp[i][l-1].r); buildtr(n,l); } cin>>q; while(q--) { int a,b; cin>>a>>b; if(a==b) { cout<<"0\n"; return 0; } Seg s={a,a}; if(b<jmp[a][L].l || jmp[a][L].r<b) { cout<<"-1\n"; continue; } int ans=0; for(int l=L;l>=0;l--) { Seg tmp=read(l,s.l,s.r); if(b<tmp.l || tmp.r<b) { s=tmp; ans+=(1<<l); } } cout<<ans+1<<"\n"; } return 0; }
#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...