제출 #637047

#제출 시각아이디문제언어결과실행 시간메모리
637047DJeniUpEvent Hopping (BOI22_events)C++17
20 / 100
368 ms30004 KiB
#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef pair<ll,ll>pairll; typedef long double ld; #define fr first #define sc second #define pb push_back #define INF 1000000000007 #define N 100007 #define endl '\n' #define MOD 998244353 ll n,m,f[100007],a[100007],p[N][27]; pairll t[4*N]; priority_queue<pairll, vector<pairll>, greater<pairll> >q; struct D{ ll l,r,num; }d[N]; bool mcp(D d1, D d2){ return d1.r<d2.r; } void BT(ll x,ll l,ll r){ if(l==r){ t[x]={d[l].l,l}; return ; } ll m1=(l+r)/2; BT(x*2+1,l,m1); BT(x*2+2,m1+1,r); if(t[x*2+1].fr<t[x*2+2].fr){ t[x]=t[x*2+1]; }else{ t[x]=t[x*2+2]; } return ; } pairll R(ll x,ll l,ll r,ll tl,ll tr){ if(tr<tl)return {INF,0}; if(r<tl || tr<l)return {INF,0}; if(tl<=l && r<=tr)return t[x]; ll m1=(l+r)/2; pairll m2=R(x*2+1,l,m1,tl,tr); pairll m3=R(x*2+2,m1+1,r,tl,tr); if(m2.fr<m3.fr)return m2; return m3; } pairll S(ll x,ll y){ if(d[x].l<=d[y].r)return {x,0}; ll g=0; for(int i=20;i>=0;i--){ if(d[p[x][i]].l>d[y].r){ g+=(1<<i); x=p[x][i]; } } g++; x=p[x][0]; return {x,g}; } int main() { cin>>n>>m; for(int i=1;i<=n;i++){ ll x,y; cin>>x>>y; d[i]={x,y,i}; } sort(d+1,d+1+n,mcp); for(int i=1;i<=n;i++){ a[d[i].num]=i; } BT(0,1,n); for(int i=1;i<=n;i++){ ll l=1; ll r=i; while(l<r){ ll m1=(l+r)/2; if(d[m1].r<d[i].l)l=m1+1; else r=m1; } pairll m1=R(0,1,n,l,i-1); p[i][0]=m1.sc; } for(int i=1;i<=20;i++){ for(int j=1;j<=n;j++){ p[j][i]=p[p[j][i-1]][i-1]; } } for(int i=1;i<=m;i++){ ll x,y; cin>>x>>y; x=a[x]; y=a[y]; if(d[y].r<d[x].r){ cout<<"impossible"<<endl; continue; } pairll m1=S(y,x); swap(x,y); if(x==y)cout<<0<<endl; else if(d[m1.fr].r<d[y].r || d[m1.fr].l>d[y].r)cout<<"impossible"<<endl; else cout<<m1.sc+1<<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...