제출 #601031

#제출 시각아이디문제언어결과실행 시간메모리
601031CSQ31Event Hopping (BOI22_events)C++17
25 / 100
1594 ms4652 KiB
#include <bits/stdc++.h> using namespace std; #define all(a) a.begin(),a.end() #define owo ios_base::sync_with_stdio(0);cin.tie(0); const int MAXN = 1e5+1; int s[MAXN],e[MAXN]; int main() { owo int n,q; cin>>n>>q; vector<int>crd; for(int i=0;i<n;i++)cin>>s[i]>>e[i]; for(int i=0;i<n;i++){ crd.push_back(s[i]); crd.push_back(e[i]); } sort(all(crd)); crd.resize(unique(all(crd)) - crd.begin()); for(int i=0;i<n;i++){ s[i] = lower_bound(all(crd),s[i]) - crd.begin()+1; e[i] = lower_bound(all(crd),e[i]) - crd.begin()+1; } int m = crd.size(); vector<int>mn(m+1); for(int i=1;i<=m;i++)mn[i] = i; for(int i=0;i<n;i++){ mn[e[i]] = min(mn[e[i]],s[i]); } //cout<<"range"<<'\n'; //for(int i=0;i<n;i++)cout<<s[i]<<" "<<e[i]<<'\n'; //for(int i=1;i<=m;i++)cout<<mn[i]<<" "; //cout<<'\n'; //greedy backwards //forward fails because we are going to exact nodes while(q--){ int l,r; cin>>l>>r; l--; r--; if(l==r){ cout<<0<<'\n'; continue; } if(e[l] > e[r]){ cout<<"impossible"<<'\n'; continue; } int cur = s[r]; int last = e[r]; int ans = 1; while(cur > e[l]){ int best = cur; for(int i=cur;i<=last;i++)best = min(best,mn[i]); if(best == cur){ ans = -1; break; } last = cur; cur = best; ans++; } if(ans==-1)cout<<"impossible"<<'\n'; else cout<<ans<<'\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...