Submission #855554

# Submission time Handle Problem Language Result Execution time Memory
855554 2023-10-01T12:20:42 Z dlalswp25 Circle selection (APIO18_circle_selection) C++17
64 / 100
1776 ms 205716 KB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;
typedef pair<int, int> pii;

const int K = 1;

int N;
int X[303030];
int Y[303030];
int R[303030];
int XL[303030];
int XR[303030];
int XC[303030];
int ans[303030];
int cur;
char rr;

void rf(int &x) {
	x = 0;
	int sgn = 0;
	while (rr < 48 && rr != '-') rr = getchar();
	if (rr == '-') { sgn = 1; rr = getchar(); }
	while (47 < rr) { x = (x << 3) + (x << 1) + (rr & 15); rr = getchar(); }
	if (sgn) x = -x;
}

inline bool intersect(int i, int j) {
	long long dx = X[i] - X[j], dy = Y[i] - Y[j], r = R[i] + R[j];
	return dx * dx + dy * dy <= r * r;
}

inline void chk(int cand) {
	int &t = ans[cur];
	if (R[cand] < R[t] || (R[cand] == R[t] && cand > t)) return;
	if (intersect(cur, cand)) t = cand;
}

struct SegTree {
	struct Node {
		set<pii> s;
	};

	int n, base;
	vector<Node> T;
	vector<int> L;

	SegTree(int _n) : n(_n) {
		for (base = 1; base < n; base <<= 1);
		T.resize(base + base);
		L.resize(base + base);
		for (int i = base; i < base + base; i++) L[i] = i - base + 1;
		for (int i = base - 1; i >= 1; i--) L[i] = L[i << 1];
	}

	void chk_node(int idx, int y) {
		auto it = T[idx].s.lower_bound({y, 0});
		auto tmp = it;
		if (it != T[idx].s.end()) chk(it->second);
		if (it != T[idx].s.begin()) {
			it--;
			chk(it->second);
		}
	}

	void upd(int p, int q, pii x) {
		p += base; q += base;
		p--; q--;
		while (p <= q) {
			if (p & 1) T[p++].s.insert(x);
			if (~q & 1) T[q--].s.insert(x);
			p >>= 1; q >>= 1;
		}
	}

	void get(int p, int y, int li) {
		p += base; p--;
		while (p >= 1) {
			if (L[p] <= li) break;
			chk_node(p, y);
			p >>= 1;
		}
	}
};

int main() {
	rf(N);
	vector<int> v; v.reserve(3 * N);
	for (int i = 1; i <= N; i++) {
		rf(X[i]); rf(Y[i]); rf(R[i]);
		XL[i] = X[i] - R[i], XR[i] = X[i] + R[i];
		v.push_back(XL[i]);
		v.push_back(XR[i]);
		v.push_back(X[i]);
	}
	sort(v.begin(), v.end());
	v.erase(unique(v.begin(), v.end()), v.end());
	for (int i = 1; i <= N; i++) {
		XL[i] = lower_bound(v.begin(), v.end(), XL[i]) - v.begin() + 1;
		XR[i] = lower_bound(v.begin(), v.end(), XR[i]) - v.begin() + 1;
		XC[i] = lower_bound(v.begin(), v.end(), X[i]) - v.begin() + 1;
	}

	int M = v.size();
	SegTree seg(M);

	vector<int> idx(N);
	iota(idx.begin(), idx.end(), 1);
	sort(idx.begin(), idx.end(), [&](int a, int b) {
		return pii(R[a], -a) > pii(R[b], -b);
	});

	for (int i : idx) {
		cur = i;
		ans[i] = i;
		seg.get(XL[i], Y[i], 0);
		seg.get(XC[i], Y[i], XL[i]);
		seg.get(XR[i], Y[i], XC[i]);
		if (ans[i] == i) seg.upd(XL[i], XR[i], {Y[i], i});
	}

	for (int i = 1; i <= N; i++) printf("%d ", ans[i]); puts("");
	return 0;
}

Compilation message

circle_selection.cpp: In member function 'void SegTree::chk_node(int, int)':
circle_selection.cpp:59:8: warning: variable 'tmp' set but not used [-Wunused-but-set-variable]
   59 |   auto tmp = it;
      |        ^~~
circle_selection.cpp: In function 'int main()':
circle_selection.cpp:123:2: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
  123 |  for (int i = 1; i <= N; i++) printf("%d ", ans[i]); puts("");
      |  ^~~
circle_selection.cpp:123:54: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  123 |  for (int i = 1; i <= N; i++) printf("%d ", ans[i]); puts("");
      |                                                      ^~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6492 KB Output is correct
11 Correct 1 ms 6492 KB Output is correct
12 Correct 1 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 1 ms 6492 KB Output is correct
15 Correct 1 ms 6588 KB Output is correct
16 Correct 2 ms 7004 KB Output is correct
17 Correct 2 ms 7004 KB Output is correct
18 Correct 2 ms 7000 KB Output is correct
19 Correct 5 ms 8540 KB Output is correct
20 Correct 5 ms 8540 KB Output is correct
21 Correct 6 ms 8376 KB Output is correct
22 Correct 6 ms 9048 KB Output is correct
23 Correct 11 ms 10072 KB Output is correct
24 Correct 7 ms 9052 KB Output is correct
25 Correct 6 ms 8796 KB Output is correct
26 Correct 6 ms 8912 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 551 ms 122196 KB Output is correct
2 Correct 539 ms 122404 KB Output is correct
3 Correct 521 ms 128616 KB Output is correct
4 Correct 523 ms 128740 KB Output is correct
5 Correct 395 ms 74324 KB Output is correct
6 Correct 447 ms 139600 KB Output is correct
7 Correct 457 ms 129692 KB Output is correct
8 Correct 460 ms 132436 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 307 ms 90272 KB Output is correct
3 Correct 1130 ms 203816 KB Output is correct
4 Correct 1101 ms 202988 KB Output is correct
5 Correct 1469 ms 198948 KB Output is correct
6 Correct 518 ms 93524 KB Output is correct
7 Correct 184 ms 48300 KB Output is correct
8 Correct 18 ms 15448 KB Output is correct
9 Correct 1191 ms 205716 KB Output is correct
10 Correct 1776 ms 192408 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 770 ms 186500 KB Output is correct
2 Correct 388 ms 157128 KB Output is correct
3 Correct 896 ms 137624 KB Output is correct
4 Correct 420 ms 160792 KB Output is correct
5 Correct 407 ms 159352 KB Output is correct
6 Incorrect 738 ms 131696 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6492 KB Output is correct
11 Correct 1 ms 6492 KB Output is correct
12 Correct 1 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 1 ms 6492 KB Output is correct
15 Correct 1 ms 6588 KB Output is correct
16 Correct 2 ms 7004 KB Output is correct
17 Correct 2 ms 7004 KB Output is correct
18 Correct 2 ms 7000 KB Output is correct
19 Correct 5 ms 8540 KB Output is correct
20 Correct 5 ms 8540 KB Output is correct
21 Correct 6 ms 8376 KB Output is correct
22 Correct 6 ms 9048 KB Output is correct
23 Correct 11 ms 10072 KB Output is correct
24 Correct 7 ms 9052 KB Output is correct
25 Correct 6 ms 8796 KB Output is correct
26 Correct 6 ms 8912 KB Output is correct
27 Correct 10 ms 10332 KB Output is correct
28 Correct 10 ms 10316 KB Output is correct
29 Correct 10 ms 10332 KB Output is correct
30 Correct 16 ms 12380 KB Output is correct
31 Correct 12 ms 11624 KB Output is correct
32 Correct 12 ms 11612 KB Output is correct
33 Correct 145 ms 65592 KB Output is correct
34 Correct 148 ms 65680 KB Output is correct
35 Correct 150 ms 65668 KB Output is correct
36 Correct 187 ms 80456 KB Output is correct
37 Correct 187 ms 80720 KB Output is correct
38 Correct 209 ms 83156 KB Output is correct
39 Correct 117 ms 13268 KB Output is correct
40 Correct 123 ms 13460 KB Output is correct
41 Correct 119 ms 13396 KB Output is correct
42 Correct 127 ms 14948 KB Output is correct
43 Correct 123 ms 73996 KB Output is correct
44 Correct 125 ms 73808 KB Output is correct
45 Correct 129 ms 73812 KB Output is correct
46 Correct 126 ms 73996 KB Output is correct
47 Correct 123 ms 73996 KB Output is correct
48 Correct 122 ms 73808 KB Output is correct
49 Correct 133 ms 73988 KB Output is correct
50 Correct 124 ms 73808 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 6492 KB Output is correct
2 Correct 1 ms 6492 KB Output is correct
3 Correct 1 ms 6492 KB Output is correct
4 Correct 1 ms 6492 KB Output is correct
5 Correct 1 ms 6492 KB Output is correct
6 Correct 1 ms 6492 KB Output is correct
7 Correct 1 ms 6492 KB Output is correct
8 Correct 1 ms 6492 KB Output is correct
9 Correct 1 ms 6492 KB Output is correct
10 Correct 1 ms 6492 KB Output is correct
11 Correct 1 ms 6492 KB Output is correct
12 Correct 1 ms 6492 KB Output is correct
13 Correct 1 ms 6492 KB Output is correct
14 Correct 1 ms 6492 KB Output is correct
15 Correct 1 ms 6588 KB Output is correct
16 Correct 2 ms 7004 KB Output is correct
17 Correct 2 ms 7004 KB Output is correct
18 Correct 2 ms 7000 KB Output is correct
19 Correct 5 ms 8540 KB Output is correct
20 Correct 5 ms 8540 KB Output is correct
21 Correct 6 ms 8376 KB Output is correct
22 Correct 6 ms 9048 KB Output is correct
23 Correct 11 ms 10072 KB Output is correct
24 Correct 7 ms 9052 KB Output is correct
25 Correct 6 ms 8796 KB Output is correct
26 Correct 6 ms 8912 KB Output is correct
27 Correct 551 ms 122196 KB Output is correct
28 Correct 539 ms 122404 KB Output is correct
29 Correct 521 ms 128616 KB Output is correct
30 Correct 523 ms 128740 KB Output is correct
31 Correct 395 ms 74324 KB Output is correct
32 Correct 447 ms 139600 KB Output is correct
33 Correct 457 ms 129692 KB Output is correct
34 Correct 460 ms 132436 KB Output is correct
35 Correct 1 ms 6492 KB Output is correct
36 Correct 307 ms 90272 KB Output is correct
37 Correct 1130 ms 203816 KB Output is correct
38 Correct 1101 ms 202988 KB Output is correct
39 Correct 1469 ms 198948 KB Output is correct
40 Correct 518 ms 93524 KB Output is correct
41 Correct 184 ms 48300 KB Output is correct
42 Correct 18 ms 15448 KB Output is correct
43 Correct 1191 ms 205716 KB Output is correct
44 Correct 1776 ms 192408 KB Output is correct
45 Correct 770 ms 186500 KB Output is correct
46 Correct 388 ms 157128 KB Output is correct
47 Correct 896 ms 137624 KB Output is correct
48 Correct 420 ms 160792 KB Output is correct
49 Correct 407 ms 159352 KB Output is correct
50 Incorrect 738 ms 131696 KB Output isn't correct
51 Halted 0 ms 0 KB -