Submission #1246286

#TimeUsernameProblemLanguageResultExecution timeMemory
1246286trideserEvent Hopping (BOI22_events)C++20
25 / 100
1595 ms1492 KiB
#include <bits/stdc++.h> using namespace std; int main() { int N, Q; cin >> N >> Q; vector<pair<int, int>> events(N); for(int i = 0; i < N; i++) { int a, b; cin >> a >> b; events[i] = make_pair(a, b); } //vector<pair<int, int>> events2 = events; //sort(events2.begin(), events2.end()); vector<int> optimal(N); for(int i = 0; i < N; i++) { int opt = -1; for(int j = 0; j < N; j++) { //cout << events[i].first << " - " << events[i].second << " : "; //cout << events[j].first << " - " << events[j].second << "\n"; //cout << (events[j].first < events[i].first) << (events[j].second > events[i].first) << "\n"; if(events[j].first < events[i].first && events[j].second >= events[i].first && events[j].second <= events[i].second && (opt == -1 || events[j].first < events[opt].first)) { //cout << "OPT\n"; opt = j; } } optimal[i] = opt; } vector<vector<int>> jumps; jumps.push_back(optimal); bool bb = true; while(bb) { bb = false; vector<int> cur(N); for(int i = 0; i < N; i++) { if(jumps.back()[i] == -1) cur[i] = -1; else{ cur[i] = jumps.back()[jumps.back()[i]]; bb = true; } } jumps.push_back(cur); } /*for(vector<int> vec : jumps) { for(int a : vec) cout << a << " "; cout << "\n"; }*/ for(int i = 0; i < Q; i++) { int a, b; cin >> a >> b; if(a == b) { cout << "0\n"; continue; } a--; b--; if(events[a].second > events[b].second) { cout << "impossible\n"; continue; } if(events[a].second >= events[b].first) { cout << "1\n"; continue; } int ret = 0; int currentE = b; bool possible = false; /*while(currentE != -1 && events[currentE].first > events[a].second) { //cout << "\t" << currentE << "\n"; currentE = optimal[currentE]; ret++; }*/ for(int i = jumps.size() - 1; i >= 0; i--) { if(jumps[i][currentE] == -1) continue; if(events[jumps[i][currentE]].first > events[a].second) { currentE = jumps[i][currentE]; ret += (1 << i); } else { possible = true; } } if(!possible) 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...