Submission #779573

#TimeUsernameProblemLanguageResultExecution timeMemory
779573CpDarkEvent Hopping (BOI22_events)C++14
30 / 100
134 ms17488 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> pii; typedef vector<pii> vp; typedef vector<vp> vvp; typedef vector<bool> vb; typedef vector<vb> vvb; typedef vector<ll> vll; typedef vector<vll> vvll; const ll inf = 1e18 + 7; vvp table; vp events; vector<pair<int,pii>> endTimes; int mylog; int query(int start, int end) { if (events[start].second > events[end].second)return -1; if (start == end)return 0; int wall = events[start].second; int jumps = 1; if (events[end].first <= wall && wall <= events[end].second) return jumps; for (int i = mylog;i >= 0;i--) { if (events[table[i][end].first].first > wall) { jumps += 1 << i; end = table[i][end].first; } } jumps++; end = table[0][end].first; if (events[end].first <= wall && wall <= events[end].second)return jumps; return -1; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, q; cin >> n >> q; mylog = ceil(log2(n + 1)); events.resize(n); endTimes.resize(n); table.resize(mylog + 1, vp(n)); for (int i = 0;i < n;i++) { cin >> events[i].first >> events[i].second; endTimes[i] = { events[i].second, {events[i].first, i} }; } sort(endTimes.begin(), endTimes.end()); for (int i = 0;i < endTimes.size();i++) { int index = endTimes[i].second.second; int far = lower_bound(endTimes.begin(), endTimes.end(), (pair<int, pii>){ events[index].first, make_pair(-1,-1)}) - endTimes.begin(); table[0][index] = { endTimes[far].second.second, endTimes[far].first}; } for (int i = 1;i <= mylog;i++) { for (int v = 0;v < n;v++) { int p = table[i - 1][v].first; table[i][v] = table[i - 1][p]; } } int s, e; for (int i = 0;i < q;i++) { cin >> s >> e; s--; e--; int ans = query(s, e); if (ans == -1) { cout << "impossible\n"; } else { cout << ans << '\n'; } } return 0; }

Compilation message (stderr)

events.cpp: In function 'int main()':
events.cpp:59:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for (int i = 0;i < endTimes.size();i++) {
      |                    ~~^~~~~~~~~~~~~~~~~
#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...