제출 #1146789

#제출 시각아이디문제언어결과실행 시간메모리
1146789Rawlat_vanakEvent Hopping (BOI22_events)C++20
0 / 100
23 ms10568 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define speedIO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); //#define mod 1000000007 #define f first #define s second #define pii pair<int,int> #define pb push_back vector<pii> seg,idk; void build(int v, int l, int r){ if(l>r) return; if(l==r){ seg[v]=idk[l]; }else{ int m=(l+r)/2; build(2*v,l,m); build(2*v+1,m+1,r); seg[v]=max(seg[2*v],seg[2*v+1]); } } pii get(int v, int l, int r, int cl, int cr){ if(cl>cr){ return {0,0}; } if(l==cl and r==cr){ return seg[v]; }else{ int m=(l+r)/2; return max(get(2*v,l,m,cl,min(cr,m)),get(2*v+1,m+1,r,max(m+1,cl),cr)); } } int32_t main(){ speedIO; int t,n,m,k,q; //cin>>t; t=1; while(t--){ cin>>n>>q; int s[n],e[n]; vector<pii> start(n); for(int i=0;i<n;i++){ cin>>s[i]>>e[i]; start[i]={s[i],i}; } sort(start.begin(),start.end()); vector<int> best(n),bruh(n),pos(n); idk.resize(n+1); for(int i=0;i<n;i++){ idk[i+1].f=e[start[i].s]; idk[i+1].s=start[i].s; pos[start[i].s]=i; bruh[i]=start[i].f; //cout<<idk[i+1].f<<' '<<idk[i+1].s<<'\n'; } //cout<<'\n'; seg.resize(2*n+1); build(1,1,n); //cout<<get(1,1,n,1,3).f<<' '<<get(1,1,n,1,3).s<<'\n'; for(int i=0;i<n;i++){ int l=s[i],r=e[i]; int idx=upper_bound(bruh.begin(),bruh.end(),r)-bruh.begin(); idx--; //cout<<idx<<'\n'; if(idx==-1){ best[i]=-1; }else{ //pii tmp=max(get(1,1,n,1,pos[i]),get(1,1,n,pos[i]+2,idx+1)); pii tmp={0,0};//get(1,1,n,1,idx+1); if(tmp.f>=e[i]){ best[i]=tmp.s; }else{ best[i]=-1; } if(best[i]==i){ best[i]=-1; } } } /*for(int i:best){ cout<<i<<' '; } cout<<'\n';*/ while(q--){ int x,y; cin>>x>>y; x--;y--; if(x==y){ cout<<0<<'\n'; continue; } int cl=s[x],cr=e[x]; int el=s[y],er=e[y]; int ans=0; bool flag=true; if(er<cr) flag=false; while(el>cr){ if(er<cr) flag=false; if(best[x]==-1){ flag=false; break; } x=best[x]; cl=s[x]; cr=e[x]; ans++; } if(er<cr) flag=false; if(flag){ cout<<ans+1<<'\n'; }else{ cout<<"impossible\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...