Submission #1147074

#TimeUsernameProblemLanguageResultExecution timeMemory
1147074ace5Event Hopping 2 (JOI21_event2)C++20
100 / 100
190 ms39712 KiB
#include <bits/stdc++.h> using namespace std; const int maxlog = 20; vector<vector<int>> binup; vector<int> rp; int get(int l,int r) { int ans = 0; for(int i = maxlog-1;i >= 0;--i) { if(binup[i][l] <= r) { l = binup[i][l]; ans += (1<<i); } } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n,k; cin >> n >> k; vector<pair<int,int>> seg; map<int,int> comp; for(int i = 0;i < n;++i) { int l,r; cin >> l >> r; seg.push_back({l,r}); comp[l] = 1; comp[r] = 1; } int p = 0; for(auto& [u, x]:comp) { x = p++; } for(int i = 0;i < n;++i) { seg[i] = {comp[seg[i].first],comp[seg[i].second]}; } vector<vector<int>> cr(p); for(int i = 0;i < n;++i) { cr[seg[i].first].push_back(seg[i].second); } rp.resize(p+1); rp[p] = p; int tmn = p; for(int i = p-1;i >= 0;--i) { for(int j = 0;j < cr[i].size();++j) { tmn = min(tmn,cr[i][j]); } rp[i] = tmn; } binup.resize(maxlog); for(int i = 0;i < maxlog;++i) { binup[i].resize(p+1); for(int j = 0;j <= p;++j) { binup[i][j] = (i == 0 ? rp[j] : binup[i-1][binup[i-1][j]]); } } set<pair<int,int>> cseg; int cans = get(0,p-1); if(cans < k) { cout << -1; return 0; } int ct = 0; for(int i = 0;i < n;++i) { int tl = seg[i].first,tr = seg[i].second; int lg = 0,rg = p-1; auto it = cseg.lower_bound(make_pair(tl,-1)); if(it != cseg.end()) { rg = (*it).first; } if(it != cseg.begin()) { it--; lg = (*it).second; } if(lg > tl || rg < tr) { continue; } int ch = get(lg,tl) + get(tr,rg) + 1 - get(lg,rg); if(cans + ch >= k) { cout << i+1 << "\n"; ct++; if(ct == k) break; cans += ch; cseg.insert(seg[i]); } } 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...