제출 #1231110

#제출 시각아이디문제언어결과실행 시간메모리
1231110damamilaEvent Hopping 2 (JOI21_event2)C++20
0 / 100
3094 ms8512 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);  
	int n, k;
	cin >> n >> k;
	vector<pair<int, int>> events(n);
	vector<tuple<int, bool, int>> sweep;
	for (int i = 0; i < n; i++) {
		int l, r;
		cin >> l >> r;
		events[i] = {l, r};
		sweep.push_back({l, 1, i});
		sweep.push_back({r, 0, i});
	}
	sort(sweep.rbegin(), sweep.rend());
	int prev = 0;
	vector<int> dp(n, 0);
	int mx = 0;
	for (auto [x, state, i] : sweep) {
		if (state == 1) {
			prev = max(prev, dp[i]);
		} else {
			dp[i] = prev+1;
			mx = max(mx, dp[i]);
		}
		//~ cout << x << " " << i << " " << state << " " << prev << " " << dp[i] << endl;
	}
	if (mx < k) {
		cout << -1;
		return 0;
	}
	prev = 0;
	vector<int> ans;
	vector<bool> use(n, 0);
	for (int need = k; need > 0; need--) {
		for (int i = 0; i < n; i++) {
			if (use[i]) continue;
			if (dp[i] >= need && events[i].first >= prev) {
				ans.push_back(i+1);
				prev = events[i].second;
				use[i] = 1;
				break;
			}
		}
	}
	sort(ans.begin(), ans.end());
	for (int i : ans) cout << i << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...