Submission #721067

#TimeUsernameProblemLanguageResultExecution timeMemory
721067Rafi22Event Hopping (BOI22_events)C++14
100 / 100
459 ms49528 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define st first #define nd second #define pb push_back #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() #define ll long long ll mod=1000000007; int inf=1000000007; ll infl=1000000000000000007; const int N=100007,L=17,pot=1<<18; int l[N],r[N]; int skok[N][L]; map<int,int>M; pair<int,int>seg[2*pot+7]; void ins(int v,int x,int i) { v+=pot-1; seg[v]=min(seg[v],{x,i}); while(v>1) { v/=2; seg[v]=min(seg[2*v],seg[2*v+1]); } } pair<int,int>que(int v,int a,int b,int l,int r) { if(a<=l&&b>=r) return seg[v]; if(r<a||l>b) return {inf,0}; return min(que(2*v,a,b,l,(l+r)/2),que(2*v+1,a,b,(l+r)/2+1,r)); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,q; cin>>n>>q; set<int>S; for(int i=1;i<=n;i++) { cin>>l[i]>>r[i]; S.insert(l[i]); S.insert(r[i]); } int it=0; for(auto x:S) M[x]=++it; for(int i=1;i<=n;i++) { l[i]=M[l[i]]; r[i]=M[r[i]]; } for(int i=1;i<2*pot;i++) seg[i].st=inf; for(int i=1;i<=n;i++) ins(r[i],l[i],i); for(int i=1;i<=n;i++) skok[i][0]=que(1,l[i],r[i],1,pot).nd; for(int j=1;j<L;j++) for(int i=1;i<=n;i++) skok[i][j]=skok[skok[i][j-1]][j-1]; while(q--) { int a,b; cin>>a>>b; int ans=0; for(int i=L-1;i>=0;i--) { if(l[skok[b][i]]>r[a]) { ans+=(1<<i); b=skok[b][i]; } } if(a==b) cout<<0<<endl; else if(r[b]<r[a]) cout<<"impossible"<<endl; else if(l[b]<=r[a]) cout<<1<<endl; else if(l[skok[b][0]]<=r[a]) cout<<ans+2<<endl; else cout<<"impossible"<<endl; } 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...