Submission #637054

#TimeUsernameProblemLanguageResultExecution timeMemory
637054DJeniUpEvent Hopping (BOI22_events)C++17
20 / 100
155 ms29776 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; scanf("%lld %lld", &n, &m); for(int i=1;i<=n;i++){ ll x,y; //cin>>x>>y; scanf("%lld %lld", &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); if(m1.fr>=d[i].l)p[i][0]=0; else 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; scanf("%lld %lld", &x, &y); x=a[x]; y=a[y]; if(d[y].r<d[x].r){ //cout<<"impossible"<<endl; printf("impossible\n"); continue; } pairll m1=S(y,x); swap(x,y); if(x==y)printf("0\n"); else if(d[m1.fr].r<d[y].r || d[m1.fr].l>d[y].r || m1.fr==0)printf("impossible\n"); else printf("%lld\n", m1.sc+1); } return 0; }

Compilation message (stderr)

events.cpp: In function 'int main()':
events.cpp:75:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |     scanf("%lld %lld", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~
events.cpp:79:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   79 |         scanf("%lld %lld", &x, &y);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~
events.cpp:107:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  107 |         scanf("%lld %lld", &x, &y);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...