제출 #1322720

#제출 시각아이디문제언어결과실행 시간메모리
1322720simona1230Event Hopping (BOI22_events)C++20
20 / 100
260 ms17372 KiB
#include<bits/stdc++.h> using namespace std; struct help { int l,r,i; help(){} help(int _l,int _r,int _i) { l=_l; r=_r; i=_i; } }; int n,q; help a[100001],b[100001]; void read() { cin>>n>>q; for(int i=1;i<=n;i++) { cin>>a[i].l>>a[i].r; a[i].i=i; } for(int i=1;i<=q;i++) { cin>>b[i].l>>b[i].r; b[i].i=i; } } bool cmpr(help h1,help h2) { return h1.r<h2.r; } int t[400001]; void build(int i,int l,int r) { if(l==r) { t[i]=l; return; } int m=(l+r)/2; build(i*2,l,m); build(i*2+1,m+1,r); if(a[t[2*i]].l<a[t[2*i+1]].l)t[i]=t[2*i]; else t[i]=t[2*i+1]; //cout<<l<<" "<<r<<" "<<t[i]<<endl; } int query(int i,int l,int r,int ql,int qr) { if(ql>qr)return 0; if(ql<=l&&r<=qr)return t[i]; int m=(l+r)/2; int q1=query(i*2,l,m,ql,min(qr,m)); int q2=query(i*2+1,m+1,r,max(m+1,ql),qr); if(q1==0)return q2; if(q2==0)return q1; if(a[q1].l<a[q2].l)return q1; return q2; } int g[200001][32]; int p[200001],id[200001]; void prec() { sort(a+1,a+n+1,cmpr); build(1,1,n); for(int i=1;i<=n;i++) { //cout<<"!! "<<a[i].l<<" "<<a[i].r<<endl; int h=0; int l=1,r=i; while(l<=r) { int m=(l+r)/2; if(a[m].r>=a[i].l) { h=m; r=m-1; } else l=m+1; } h=query(1,1,n,h,i); g[a[i].i][0]=a[h].i; //cout<<a[i].i<<" > "<<a[h].i<<endl; } for(int j=1;j<=20;j++) { for(int i=1;i<=n;i++) { g[i][j]=g[g[i][j-1]][j-1]; //cout<<i<<" "<<j<<" "<<g[i][j]<<endl; } } } bool cmp(help h1,help h2) { return h1.i<h2.i; } void solve() { sort(a+1,a+n+1,cmp); for(int i=1;i<=q;i++) { int x=b[i].l,y=b[i].r; if(x==y) { cout<<0<<endl; continue; } int cnt=0; if(a[y].l<=a[x].r&&a[x].r<=a[y].r) { cout<<1<<endl; continue; } for(int j=20;j>=0;j--) { if(a[x].l<a[g[y][j]].l) { y=g[y][j]; cnt+=(1<<j); } } if(a[y].l>a[x].l&&a[g[y][0]].l<=a[x].l)cout<<cnt+1<<endl; else cout<<"impossible"<<endl; } } int main() { read(); prec(); solve(); return 0; } /* 6 5 8 9 5 8 9 12 1 3 2 3 10 13 1 3 2 5 1 6 4 5 3 4 4 3 1 5 2 7 3 9 8 10 1 2 1 3 1 4 6 1 5 8 10 12 14 16 3 6 1 4 11 15 4 4 1 4 2 8 5 6 7 10 1 2 2 3 3 2 1 4 6 4 1 5 2 8 5 6 7 10 9 10 12 13 1 6 1 3 3 1 2 5 */
#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...