Submission #805399

#TimeUsernameProblemLanguageResultExecution timeMemory
805399vjudge1Event Hopping (BOI22_events)C++17
30 / 100
286 ms43260 KiB
#include<bits/stdc++.h> using namespace std; #define all(fl) fl.begin(),fl.end() #define pb push_back #define fi first #define se second #define for1(i,j,k) for(int i=j;i<=k;i++) #define for2(i,j,k) for(int i=j;i>=k;i--) #define for3(i,j,k,l) for(int i=j;i<=k;i+=l) #define lb lower_bound #define ub upper_bound #define sz(a) (int)a.size() #define pii pair<int,int> #define pli pair<long long,int> #define gcd __gcd #define lcm(x,y) x*y/__gcd(x,y) const int maxn=1e5+9; pii a[maxn]; int ans[maxn]; int st[maxn][19]; int n,q; vector<int>add[maxn*2],del[maxn*2]; void build(){ multiset<pii>t; multiset<pii>::iterator it; for1(i,1,n){ add[a[i].se].pb(i); del[a[i].fi].pb(i); } for2(i,2*n,1){ for (auto v:add[i]){ t.insert({a[v].se,v}); } for (auto v:add[i]){ it=t.end(); it--; auto tmp=(*it); if (tmp.fi<=a[v].se)continue; st[v][0]=tmp.se; } for (auto v:del[i]){ t.erase({a[v].se,v}); } vector<int>().swap(add[i]); vector<int>().swap(del[i]); } for1(j,1,18){ for1(i,1,n){ st[i][j]=st[st[i][j-1]][j-1]; } } } int b[maxn]; vector<int>query[maxn]; void solveright(){ multiset<pii>t; multiset<pii>::iterator it; for1(i,1,n){ add[a[i].se].pb(i); del[a[i].fi].pb(i); } for2(i,2*n,1){ for (auto v:add[i]){ t.insert({a[v].se,v}); } for (auto v:add[i]){ for (auto u:query[v]){ int id=u; int e=b[id]; it=t.lower_bound({a[e].fi,0}); if (it==t.end()){ ans[id]=-1; continue; } auto tmp=(*it); if (tmp.fi>a[e].se){ ans[id]=-1; continue; } ans[id]+=2; } } for (auto v:del[i]){ t.erase({a[v].se,v}); } vector<int>().swap(add[i]); vector<int>().swap(del[i]); } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); //freopen(".INP","r",stdin); //freopen(".OUT","w",stdout); cin>>n>>q; vector<int>nen; nen.pb(0); for1(i,1,n){ cin>>a[i].fi>>a[i].se; nen.pb(a[i].fi); nen.pb(a[i].se); } sort(all(nen)); map<int,int>n1; for1(i,1,sz(nen)-1){ if (nen[i]==nen[i-1])continue; n1[nen[i]]=n1[nen[i-1]]+1; } for1(i,1,n){ a[i].fi=n1[a[i].fi]; a[i].se=n1[a[i].se]; //cout<<"type "<<" "<<a[i].fi<<" "<<a[i].se<<'\n'; } build(); for1(i,1,q){ int s,e; cin>>s>>e; if (s==e)continue; if (a[s].se>a[e].se){ ans[i]=-1; continue; } for2(j,18,0){ if (!st[s][j])continue; int id=st[s][j]; if (a[id].se<a[e].fi){ ans[i]+=(1<<j); s=id; //cout<<s<<'\n'; } } if (a[s].se>=a[e].fi){ ans[i]++; continue; } //cout<<a[st[1][0]].se<<" "<<a[e].fi<<'\n'; b[i]=e; query[s].pb(i); } solveright(); for1(i,1,q){ if (ans[i]==-1)cout<<"impossible"<<'\n'; else cout<<ans[i]<<'\n'; } }
#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...