Submission #660091

#TimeUsernameProblemLanguageResultExecution timeMemory
660091KarukEvent Hopping (BOI22_events)C++14
25 / 100
1589 ms198144 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; const long long k=(1<<30); map<long long,pair<long long,long long> >maxv; void upd(long long x,long long va,long long ind) { pair<long long,long long>val={va,ind}; while(x>0) { maxv[x]=max(maxv[x],val); x>>=1; } } pair<long long,long long> ask(long long from,long long to,long long cur=1,long long beg=0,long long en=k-1) { if(from<=beg && en<=to)return maxv[cur]; if(to<beg || en<from)return {-1,-1}; long long mid=(beg+en)/2; return max(ask(from,to,cur*2,beg,mid),ask(from,to,cur*2+1,mid+1,en)); } int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); long long n,q;cin>>n>>q; pair<long long,long long>a[n]; for(long long i=0;i<n;i++) { long long x,y; cin>>x>>y; a[i]={x,y}; upd(y+k,k-x,i); } pair<long long,long long> prev[n][25]; for(long long i=0;i<n;i++) { pair<long long,long long>d=ask(a[i].first,a[i].second); d.first=k-d.first; prev[i][0]=d; } for(long long j=1;j<25;j++) { for(long long i=0;i<n;i++) { prev[i][j]=prev[prev[i][j-1].second][j-1]; } } for(long long i=0;i<q;i++) { long long x,y;cin>>x>>y;x--;y--; if(x==y)cout<<0<<endl; else if(a[x].second>=a[y].first && a[x].second<=a[y].second)cout<<1<<endl; else if(a[x].second>a[y].second){cout<<"impossible"<<endl;} else { long long cnt=0; long long cur=y; long long en=a[x].second; for(long long j=24;j>=0;j--) { if(prev[cur][j].first>en) { cur=prev[cur][j].second; cnt+=(1<<j); } } if(prev[cur][0].first>en)cout<<"impossible"<<endl; else cout<<cnt+2<<endl; } } return 0; } ///9:30
#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...