Submission #1270887

#TimeUsernameProblemLanguageResultExecution timeMemory
1270887tvgkEvent Hopping 2 (JOI21_event2)C++20
100 / 100
521 ms24168 KiB
#include<bits/stdc++.h> using namespace std; #define task "a" #define se second #define fi first #define ll long long #define ii pair<ll, ll> const long mxN = 1e5 + 7, inf = 1e9 + 7; int n, jump[mxN][25], k; ii tree[mxN * 4], a[mxN], arr[mxN]; set<ii> s; void Build(int j = 1, int l = 1, int r = n) { if (l == r) { tree[j] = {a[l].se, l}; return; } int mid = (l + r) / 2; Build(j * 2, l, mid); Build(j * 2 + 1, mid + 1, r); tree[j] = min(tree[j * 2], tree[j * 2 + 1]); } ii Get(int vt, int j = 1, int l = 1, int r = n) { if (vt <= a[l].fi) return tree[j]; if (a[r].fi < vt) return {inf, n + 1}; int mid = (l + r) / 2; return min(Get(vt, j * 2, l, mid), Get(vt, j * 2 + 1, mid + 1, r)); } int Count(int l, int r) { int res = 0; int cur = Get(l).se; for (int i = 20; i >= 0; i--) { if (cur == n + 1) break; if (jump[cur][i] <= r) { res += 1 << i; cur = Get(jump[cur][i]).se; } } return res; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen(task".INP", "r", stdin); //freopen(task".OUT", "w", stdout); cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i].fi >> a[i].se; arr[i] = a[i]; } sort(a + 1, a + n + 1); Build(); for (int i = n; i >= 1; i--) { jump[i][0] = a[i].se; for (int j = 1; j <= 20; j++) { int nxt = Get(jump[i][j - 1]).se; if (nxt == n + 1) jump[i][j] = inf; else jump[i][j] = jump[nxt][j - 1]; } } int mx = Count(1, 1e9); s.insert({0, 0}); s.insert({1, 1e9}); if (mx < k) { cout << -1; return 0; } for (int i = 1; i <= n; i++) { ii seg = *(--s.upper_bound(ii(arr[i].fi, inf))); if (seg.se < arr[i].se || !k) continue; int nw = mx - Count(seg.fi, seg.se) + Count(seg.fi, arr[i].fi) + Count(arr[i].se, seg.se); if (nw < k - 1) continue; mx = nw; k--; s.erase(seg); s.insert({seg.fi, arr[i].fi}); s.insert({arr[i].se, seg.se}); cout << 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...