Submission #722548

# Submission time Handle Problem Language Result Execution time Memory
722548 2023-04-12T09:28:31 Z minhcool Event Hopping 2 (JOI21_event2) C++17
7 / 100
262 ms 65876 KB
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define fi first
#define se second
#define pb push_back
#define mp make_pair

typedef pair<int, int> ii;
typedef pair<ii, int> iii;
typedef pair<ii, ii> iiii;

const int N = 3e5 + 5;

const int oo = 1e18 + 7, mod = 1e9 + 7;

int n, k;
int l[N], r[N];

iii seg[N];

int mini[N];
int nxt[N];
int eval[N][21];

bool cook[N];

int le[N], ri[N];
set<ii> seg1[N], seg2[N];
int comp[N];
//int mn_r[N];

int cal(int le, int ri){
	int temp = lower_bound(seg + 1, seg + n + 1, make_pair(make_pair(le, -oo), -oo)) - seg;
	if(temp == (n + 1)) return 0;
	temp = mini[temp];
	if(r[temp] > ri) return 0;
	int answer = 1;
	for(int i = 18; i >= 0; i--){
		if(eval[temp][i] == oo) continue;
		if(r[eval[temp][i]] <= ri){
			answer += (1LL << i);
			temp = eval[temp][i];
		}
	}
	return answer;
}

void process(){
	cin >> n >> k;
	for(int i = 1; i <= n; i++){
		cin >> seg[i].fi.fi >> seg[i].fi.se;
		seg[i].se = i;
		l[i] = seg[i].fi.fi, r[i] = seg[i].fi.se;
	}
	sort(seg + 1, seg + n + 1);
	mini[n + 1] = oo;	
	for(int i = n; i >= 1; i--){
		int temp = lower_bound(seg + 1, seg + n + 1, make_pair(make_pair(seg[i].fi.se, -oo), -oo)) - seg;
		if(temp == (n + 1)) nxt[seg[i].se] = oo;
		else nxt[seg[i].se] = mini[temp];
		mini[i] = mini[i + 1];
		if(i == n || seg[i].fi.se <= seg[mini[i]].fi.se) mini[i] = seg[i].se;
		eval[seg[i].se][0] = nxt[seg[i].se];
	}
	for(int i = 1; i <= 18; i++){
		for(int j = 1; j <= n; j++){
			if(eval[j][i - 1] == oo) eval[j][i] = oo;
			else eval[j][i] = eval[eval[j][i - 1]][i - 1];
		}
	}
	le[1] = 0, ri[1] = 1e9;
	for(int i = 1; i <= n; i++){
		seg1[1].insert({l[i], i});
		seg2[1].insert({r[i], i});
		comp[i] = 1;
	}
	int cur = cal(0, 1e9);
	//cout << cur << "\n";
	if(cur < k){
		cout << -1;
		return;
	}
	cur -= k;
	int tol_comp = 1;
	int num = 0;
	for(int i = 1; i <= n; i++){
		if(cook[i]) continue;
		cook[i] = 1;
		//if(l[i] < le[root] || r[i] > ri[root]) continue;
		int root = comp[i];
		int diff = cal(le[root], ri[root]);
		diff -= cal(le[root], l[i]) + cal(r[i], ri[root]) + 1;
		//cout << diff << "\n";
		assert(diff >= 0);
		if(cur < diff){
			seg1[comp[i]].erase({l[i], i});
			seg2[comp[i]].erase({r[i], i});
		//	cook[i] = 1;
			continue;
		}
		num++;
		cur -= diff;
		bool which = 0;
		set<ii>::iterator it1 = seg1[root].lower_bound({r[i], -oo}), it2 = seg2[root].lower_bound({l[i] + 1, -oo});
		if(it2 == seg2[root].begin()) which = 0;
		else{
			it2--;
			while(1){
				if(it1 == seg1[root].end()){
					which = 1;
					break;
				}
				if(it2 == seg2[root].begin()){
					which = 0;
					break;
				}
				it1++;
				it2--;
			}
		}
		if(!which){
			tol_comp++;
			le[tol_comp] = le[root], ri[tol_comp] = l[i];
			le[root] = r[i];
			set<ii>::iterator it1 = seg1[root].lower_bound({r[i], -oo}), it2 = seg2[root].lower_bound({l[i] + 1, -oo});
			vector<int> er;
			if(it2 != seg2[root].begin()){
				it2--;
				for(;; it2--){
					er.pb((*it2).se);
					if(it2 == seg2[root].begin()) break;
				}
			}
			for(auto it : er){
				comp[it] = tol_comp;
				seg1[root].erase({l[it], it});
				seg2[root].erase({r[it], it});
				seg1[tol_comp].insert({l[it], it});
				seg2[tol_comp].insert({r[it], it});
			}
			er.clear();
			it1 = seg1[root].begin();
			for(; it1 != seg1[root].end(); it1++){
				if((*it1).fi >= r[i]) break;
				er.pb((*it1).se);
			}
			for(auto it : er){
				cook[it] = 1;
				seg1[root].erase({l[it], it});
				seg2[root].erase({r[it], it});
			}
		}
		else{
			tol_comp++;
			le[tol_comp] = r[i], ri[tol_comp] = ri[root];
			ri[root] = l[i];
			set<ii>::iterator it1 = seg1[root].lower_bound({r[i], -oo});
			vector<int> er;
			for(; it1 != seg1[root].end(); it1++){
				er.pb((*it1).se);
				//if(it1 == seg2[root].begin()) break;
			}
			for(auto it : er){
				comp[it] = tol_comp;
				seg1[root].erase({l[it], it});
				seg2[root].erase({r[it], it});
				seg1[tol_comp].insert({l[it], it});
				seg2[tol_comp].insert({r[it], it});
			}
			er.clear();
			if(seg2[root].size()){
				it1 = seg2[root].end();
				it1--;
				for(; ; it1--){
					if((*it1).fi <= l[i]) break;
					er.pb((*it1).se);
					if(it1 == seg2[root].begin()) break;
				}
				for(auto it : er){
					cook[it] = 1;
					seg1[root].erase({l[it], it});
					seg2[root].erase({r[it], it});
				}
			}
		}
		cout << i << "\n";
		if(num == k) break;
	}
}

signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	process();
}
# Verdict Execution time Memory Grader output
1 Correct 14 ms 28500 KB Output is correct
2 Correct 14 ms 28444 KB Output is correct
3 Correct 18 ms 28500 KB Output is correct
4 Correct 254 ms 65876 KB Output is correct
5 Correct 197 ms 65688 KB Output is correct
6 Correct 204 ms 65664 KB Output is correct
7 Correct 201 ms 65356 KB Output is correct
8 Correct 201 ms 65764 KB Output is correct
9 Correct 221 ms 65760 KB Output is correct
10 Correct 195 ms 65560 KB Output is correct
11 Correct 205 ms 65432 KB Output is correct
12 Correct 196 ms 65076 KB Output is correct
13 Correct 180 ms 65060 KB Output is correct
14 Correct 172 ms 64904 KB Output is correct
15 Correct 189 ms 64796 KB Output is correct
16 Correct 141 ms 64136 KB Output is correct
17 Correct 137 ms 64040 KB Output is correct
18 Correct 158 ms 64052 KB Output is correct
19 Correct 135 ms 64180 KB Output is correct
20 Correct 135 ms 63820 KB Output is correct
21 Correct 129 ms 63964 KB Output is correct
22 Correct 142 ms 63900 KB Output is correct
23 Correct 137 ms 63820 KB Output is correct
24 Correct 136 ms 63832 KB Output is correct
25 Correct 148 ms 63924 KB Output is correct
26 Correct 157 ms 63936 KB Output is correct
27 Correct 140 ms 63960 KB Output is correct
28 Correct 115 ms 63788 KB Output is correct
29 Correct 107 ms 63676 KB Output is correct
30 Correct 143 ms 63780 KB Output is correct
31 Correct 113 ms 63748 KB Output is correct
32 Correct 135 ms 63708 KB Output is correct
33 Correct 152 ms 63776 KB Output is correct
34 Correct 201 ms 64596 KB Output is correct
35 Correct 151 ms 64256 KB Output is correct
36 Correct 124 ms 64024 KB Output is correct
37 Correct 231 ms 64912 KB Output is correct
38 Correct 262 ms 64792 KB Output is correct
39 Correct 175 ms 64796 KB Output is correct
40 Correct 169 ms 64816 KB Output is correct
41 Correct 197 ms 64848 KB Output is correct
42 Correct 116 ms 63688 KB Output is correct
43 Correct 168 ms 64832 KB Output is correct
44 Correct 173 ms 64800 KB Output is correct
45 Correct 174 ms 64836 KB Output is correct
46 Correct 187 ms 64872 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 28456 KB Output is correct
2 Correct 18 ms 28536 KB Output is correct
3 Correct 16 ms 28456 KB Output is correct
4 Incorrect 15 ms 28540 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 16 ms 28456 KB Output is correct
2 Correct 18 ms 28536 KB Output is correct
3 Correct 16 ms 28456 KB Output is correct
4 Incorrect 15 ms 28540 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 14 ms 28500 KB Output is correct
2 Correct 14 ms 28444 KB Output is correct
3 Correct 18 ms 28500 KB Output is correct
4 Correct 254 ms 65876 KB Output is correct
5 Correct 197 ms 65688 KB Output is correct
6 Correct 204 ms 65664 KB Output is correct
7 Correct 201 ms 65356 KB Output is correct
8 Correct 201 ms 65764 KB Output is correct
9 Correct 221 ms 65760 KB Output is correct
10 Correct 195 ms 65560 KB Output is correct
11 Correct 205 ms 65432 KB Output is correct
12 Correct 196 ms 65076 KB Output is correct
13 Correct 180 ms 65060 KB Output is correct
14 Correct 172 ms 64904 KB Output is correct
15 Correct 189 ms 64796 KB Output is correct
16 Correct 141 ms 64136 KB Output is correct
17 Correct 137 ms 64040 KB Output is correct
18 Correct 158 ms 64052 KB Output is correct
19 Correct 135 ms 64180 KB Output is correct
20 Correct 135 ms 63820 KB Output is correct
21 Correct 129 ms 63964 KB Output is correct
22 Correct 142 ms 63900 KB Output is correct
23 Correct 137 ms 63820 KB Output is correct
24 Correct 136 ms 63832 KB Output is correct
25 Correct 148 ms 63924 KB Output is correct
26 Correct 157 ms 63936 KB Output is correct
27 Correct 140 ms 63960 KB Output is correct
28 Correct 115 ms 63788 KB Output is correct
29 Correct 107 ms 63676 KB Output is correct
30 Correct 143 ms 63780 KB Output is correct
31 Correct 113 ms 63748 KB Output is correct
32 Correct 135 ms 63708 KB Output is correct
33 Correct 152 ms 63776 KB Output is correct
34 Correct 201 ms 64596 KB Output is correct
35 Correct 151 ms 64256 KB Output is correct
36 Correct 124 ms 64024 KB Output is correct
37 Correct 231 ms 64912 KB Output is correct
38 Correct 262 ms 64792 KB Output is correct
39 Correct 175 ms 64796 KB Output is correct
40 Correct 169 ms 64816 KB Output is correct
41 Correct 197 ms 64848 KB Output is correct
42 Correct 116 ms 63688 KB Output is correct
43 Correct 168 ms 64832 KB Output is correct
44 Correct 173 ms 64800 KB Output is correct
45 Correct 174 ms 64836 KB Output is correct
46 Correct 187 ms 64872 KB Output is correct
47 Correct 16 ms 28456 KB Output is correct
48 Correct 18 ms 28536 KB Output is correct
49 Correct 16 ms 28456 KB Output is correct
50 Incorrect 15 ms 28540 KB Output isn't correct
51 Halted 0 ms 0 KB -