Submission #641527

#TimeUsernameProblemLanguageResultExecution timeMemory
641527skittles1412Event Hopping 2 (JOI21_event2)C++17
100 / 100
139 ms23584 KiB
#include "bits/extc++.h" using namespace std; template <typename T> void dbgh(const T& t) { cerr << t << endl; } template <typename T, typename... U> void dbgh(const T& t, const U&... u) { cerr << t << " | "; dbgh(u...); } #ifdef DEBUG #define dbg(...) \ cerr << "L" << __LINE__ << " [" << #__VA_ARGS__ << "]" \ << ": "; \ dbgh(__VA_ARGS__) #else #define cerr \ if (false) \ cerr #define dbg(...) #endif #define endl "\n" #define long int64_t #define sz(x) int(std::size(x)) constexpr int maxn = 2e5 + 5, logn = 18; int lift[logn][maxn]; int ccomp(vector<int*>&& arr) { sort(begin(arr), end(arr), [&](const int* a, const int* b) -> bool { return *a < *b; }); int j = 0; for (int i = 0, prv; i < sz(arr); i++) { j += i && prv != *arr[i]; prv = *arr[i]; *arr[i] = j; } return j + 1; } void solve() { int n, kv; cin >> n >> kv; int arr[n][2]; for (auto& [l, r] : arr) { cin >> l >> r; } vector<int*> comp; for (auto& [l, r] : arr) { comp.emplace_back(&l); comp.emplace_back(&r); } int m = ccomp(std::move(comp)); fill(lift[0], lift[0] + m + 1, m); for (auto& [x, y] : arr) { lift[0][x] = min(lift[0][x], y); } for (int i = m - 1; i >= 0; i--) { lift[0][i] = min(lift[0][i], lift[0][i + 1]); } for (int i = 1; i < logn; i++) { for (int j = 0; j <= m; j++) { lift[i][j] = lift[i - 1][lift[i - 1][j]]; } } auto query = [&](int l, int r) -> int { int ans = 0; for (int i = logn - 1; i >= 0; i--) { if (lift[i][l] <= r) { ans |= 1 << i; l = lift[i][l]; } } return ans; }; int cans = query(0, m - 1); if (cans < kv) { cout << -1 << endl; return; } set<pair<int, int>> segs; segs.emplace(-1, 0); segs.emplace(m - 1, m); for (int i = 0; i < n && sz(segs) - 2 < kv; i++) { auto& [l, r] = arr[i]; auto it = segs.lower_bound({l, r}); int qr = it->first, ql = (--it)->second; if (ql <= l && r <= qr) { int nans = cans - query(ql, qr) + query(ql, l) + query(r, qr); if (nans + sz(segs) - 1 >= kv) { cans = nans; segs.emplace(l, r); cout << i + 1 << endl; } } } } int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); cin.exceptions(ios::failbit); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...