Submission #791902

#TimeUsernameProblemLanguageResultExecution timeMemory
791902ToniBEvent Hopping (BOI22_events)C++17
0 / 100
384 ms26656 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 2; const int LOG = 17; int n, q, s[MAXN], e[MAXN], bl[MAXN][LOG]; set<pair<int, int> > st; vector<pair<int, bool> > v[MAXN]; int main(){ cin >> n >> q; unordered_map<int, int> um; vector<int> cmp; for(int i = 0; i < n; ++i){ cin >> s[i] >> e[i]; cmp.push_back(s[i]); cmp.push_back(e[i]); } sort(cmp.begin(), cmp.end()); cmp.erase(unique(cmp.begin(), cmp.end()), cmp.end()); for(int i = 0; i < (int)cmp.size(); ++i){ um[cmp[i]] = i; } for(int i = 0; i < n; ++i){ s[i] = um[s[i]]; e[i] = um[e[i]]; v[s[i]].push_back({i, 0}); v[e[i]].push_back({i, 1}); } for(int i = 0; i < 2*n; ++i){ for(pair<int, bool> p : v[i]){ if(!p.second){ st.insert({e[p.first], p.first}); } } for(pair<int, bool> p : v[i]){ if(p.second){ int idx = (*--st.end()).second; bl[p.first][0] = idx; } } } for(int j = 1; j < LOG; ++j){ for(int i = 0; i < n; ++i){ bl[i][j] = bl[bl[i][j - 1]][j - 1]; } } while(q--){ int qs, qe; cin >> qs >> qe, --qs, --qe; if(qs == qe){ cout << "0\n"; continue; } else if(s[qs] <= s[qe] && s[qe] <= e[qs]){ cout << "1\n"; continue; } else if(e[qs] > e[qe]){ cout << "impossible\n"; continue; } int ret = 0; for(int i = LOG - 1; i >= 0; --i){ int idx = bl[qs][i]; if(e[idx] < s[qe]){ qs = idx; ret += 1 << i; } } if(e[bl[qs][0]] < s[qe]) cout << "impossible\n"; else if(bl[qs][0] != qe) cout << "impossible\n"; else cout << ret + 2 << "\n"; } 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...