Submission #417242

# Submission time Handle Problem Language Result Execution time Memory
417242 2021-06-03T13:54:13 Z pavement Event Hopping 2 (JOI21_event2) C++17
1 / 100
3000 ms 193484 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#endif
#define int long long
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define ppb pop_back
#define eb emplace_back
#define g0(a) get<0>(a)
#define g1(a) get<1>(a)
#define g2(a) get<2>(a)
#define g3(a) get<3>(a)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef double db;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef tuple<int, int, int> iii;
typedef tuple<int, int, int, int> iiii;
typedef tree<iii, null_type, greater<iii>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

int N, K, curr, L[500005], R[500005], dep[500005], anc[500005][25];
bool vis[500005];
ii mx[500005];
multiset<ii> ft[500005];
multiset<ii> untaken;
vector<int> v, adj[500005];

void dfs(int n, int e = -1) {
	anc[n][0] = e;
	vis[n] = 1;
	for (int i = 1; i <= 20; i++)
		if (anc[n][i - 1] != -1) anc[n][i] = anc[anc[n][i - 1]][i - 1];
	for (auto u : adj[n]) if (u != e) {
		dep[u] = dep[n] + 1;
		dfs(u, n);
	}
}

inline int ls(int x) { return x & -x; }

ii qry(int p) {
	ii ret = mp(LLONG_MAX, LLONG_MAX);
	for (; p <= 2 * N; p += ls(p))
		if (!ft[p].empty()) ret = min(ret, *ft[p].begin());
	return ret;
}

void upd(int x) {
	for (int p = L[x]; p; p -= ls(p))
		ft[p].emplace(R[x], x);
}

int get(int l, int r) {
	if (mx[l].second == 0) return 0;
	int curr = mx[l].second;
	if (R[curr] > r) return 0;
	for (int i = 20; i >= 0; i--)
		if (anc[curr][i] != -1 && R[anc[curr][i]] <= r) curr = anc[curr][i];
	return dep[mx[l].second] - dep[curr] + 1;
}

int forceadd(int x, bool b = 0) {
	// add [L[x], R[x]]
	auto it = untaken.lower_bound(mp(R[x], 0ll));
	if (it == untaken.begin()) return -1;
	--it;
	if (it->first <= L[x] && R[x] <= it->second) {
		if (b == 1) {
			untaken.emplace(it->first, L[x]);
			untaken.emplace(R[x], it->second);
			untaken.erase(it);
		}
		int tmp = 1 + curr + -get(it->first, it->second) + get(it->first, L[x]) + get(R[x], it->second);
		if (b) curr = tmp;
		return tmp;
	} else return -1;
}

main() {
	memset(anc, -1, sizeof anc);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> N >> K;
	for (int i = 1; i <= N; i++) cin >> L[i] >> R[i], v.pb(L[i]), v.pb(R[i]);
	sort(v.begin(), v.end());
	v.erase(unique(v.begin(), v.end()), v.end());
	for (int i = 1; i <= N; i++) {
		L[i] = lower_bound(v.begin(), v.end(), L[i]) - v.begin() + 1;
		R[i] = lower_bound(v.begin(), v.end(), R[i]) - v.begin() + 1;
		upd(i);
	}
	for (int i = 1; i <= N; i++) {
		auto tmp = qry(R[i]);
		if (tmp.second != LLONG_MAX) adj[tmp.second].pb(i);
	}
	for (int i = 1; i <= N; i++)
		if (!vis[i]) dfs(i);
	for (int i = 1; i <= 2 * N; i++)
		mx[L[i]] = max(mx[L[i]], mp(dep[i] + 1, i));
	for (int i = 2 * N; i >= 1; i--) mx[i] = max(mx[i], mx[i + 1]);
	untaken.emplace(1, 2 * N);
	curr = get(1, 2 * N);
	if (get(1, 2 * N) < K) return cout << "-1\n", 0;
	for (int i = 1, cnt = 0; i <= N; i++) {
		int x = forceadd(i);
		if (x >= K) {
			cout << i << '\n';
			cnt++;
			if (cnt == K) return 0;
			forceadd(i, 1);
		}
	}
}

Compilation message

event2.cpp:86:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   86 | main() {
      | ^~~~
# Verdict Execution time Memory Grader output
1 Correct 65 ms 133316 KB Output is correct
2 Correct 63 ms 133316 KB Output is correct
3 Correct 65 ms 133300 KB Output is correct
4 Execution timed out 3056 ms 193484 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 65 ms 133412 KB Output is correct
2 Correct 66 ms 133372 KB Output is correct
3 Correct 71 ms 133408 KB Output is correct
4 Correct 63 ms 133416 KB Output is correct
5 Correct 67 ms 133316 KB Output is correct
6 Correct 63 ms 133364 KB Output is correct
7 Correct 73 ms 133316 KB Output is correct
8 Correct 69 ms 133364 KB Output is correct
9 Correct 68 ms 133392 KB Output is correct
10 Correct 74 ms 133388 KB Output is correct
11 Correct 69 ms 133400 KB Output is correct
12 Correct 67 ms 133412 KB Output is correct
13 Correct 72 ms 133408 KB Output is correct
14 Correct 74 ms 133412 KB Output is correct
15 Correct 77 ms 133324 KB Output is correct
16 Correct 66 ms 133364 KB Output is correct
17 Correct 62 ms 133416 KB Output is correct
18 Correct 72 ms 133332 KB Output is correct
19 Correct 66 ms 133324 KB Output is correct
20 Correct 79 ms 133316 KB Output is correct
21 Correct 65 ms 133428 KB Output is correct
22 Correct 78 ms 133304 KB Output is correct
23 Correct 68 ms 133320 KB Output is correct
24 Correct 68 ms 133344 KB Output is correct
25 Correct 68 ms 133388 KB Output is correct
26 Correct 67 ms 133316 KB Output is correct
27 Correct 69 ms 133344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 65 ms 133412 KB Output is correct
2 Correct 66 ms 133372 KB Output is correct
3 Correct 71 ms 133408 KB Output is correct
4 Correct 63 ms 133416 KB Output is correct
5 Correct 67 ms 133316 KB Output is correct
6 Correct 63 ms 133364 KB Output is correct
7 Correct 73 ms 133316 KB Output is correct
8 Correct 69 ms 133364 KB Output is correct
9 Correct 68 ms 133392 KB Output is correct
10 Correct 74 ms 133388 KB Output is correct
11 Correct 69 ms 133400 KB Output is correct
12 Correct 67 ms 133412 KB Output is correct
13 Correct 72 ms 133408 KB Output is correct
14 Correct 74 ms 133412 KB Output is correct
15 Correct 77 ms 133324 KB Output is correct
16 Correct 66 ms 133364 KB Output is correct
17 Correct 62 ms 133416 KB Output is correct
18 Correct 72 ms 133332 KB Output is correct
19 Correct 66 ms 133324 KB Output is correct
20 Correct 79 ms 133316 KB Output is correct
21 Correct 65 ms 133428 KB Output is correct
22 Correct 78 ms 133304 KB Output is correct
23 Correct 68 ms 133320 KB Output is correct
24 Correct 68 ms 133344 KB Output is correct
25 Correct 68 ms 133388 KB Output is correct
26 Correct 67 ms 133316 KB Output is correct
27 Correct 69 ms 133344 KB Output is correct
28 Incorrect 75 ms 134740 KB Output isn't correct
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 65 ms 133316 KB Output is correct
2 Correct 63 ms 133316 KB Output is correct
3 Correct 65 ms 133300 KB Output is correct
4 Execution timed out 3056 ms 193484 KB Time limit exceeded
5 Halted 0 ms 0 KB -