답안 #852332

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
852332 2023-09-21T15:43:36 Z dlalswp25 원 고르기 (APIO18_circle_selection) C++17
87 / 100
3000 ms 248168 KB
#include <bits/stdc++.h>

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

const int K = 2;

int N;
int X[303030];
int Y[303030];
int R[303030];
int XL[303030];
int XR[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, int r) {
		auto it = T[idx].s.lower_bound({y, 0});
		auto tmp = it;
		for (int i = 0; i < K; i++) {
			if (it == T[idx].s.end()) break;
			chk(it->second);
			if (it->first >= (long long)y + r + r) break;
			if (i < K - 1) it++;
		}
		it = tmp;
		for (int i = 0; i < K; i++) {
			if (it == T[idx].s.begin()) break;
			it--;
			chk(it->second);
			if (it->first <= (long long)y - r - r) break;
		}
	}

	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 r, int li) {
		p += base; p--;
		while (p >= 1) {
			if (L[p] <= li) break;
			chk_node(p, y, r);
			p >>= 1;
		}
	}
};

int main() {
	rf(N);
	vector<int> v;
	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]);
	}
	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;
	}

	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], R[i], 0);
		seg.get(XR[i], Y[i], R[i], XL[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 function 'int main()':
circle_selection.cpp:126:2: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
  126 |  for (int i = 1; i <= N; i++) printf("%d ", ans[i]); puts("");
      |  ^~~
circle_selection.cpp:126:54: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  126 |  for (int i = 1; i <= N; i++) printf("%d ", ans[i]); puts("");
      |                                                      ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6488 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 6592 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 6488 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 6748 KB Output is correct
17 Correct 2 ms 6748 KB Output is correct
18 Correct 2 ms 6744 KB Output is correct
19 Correct 5 ms 8572 KB Output is correct
20 Correct 5 ms 8540 KB Output is correct
21 Correct 5 ms 8572 KB Output is correct
22 Correct 6 ms 9052 KB Output is correct
23 Correct 10 ms 9564 KB Output is correct
24 Correct 6 ms 8796 KB Output is correct
25 Correct 5 ms 8540 KB Output is correct
26 Correct 5 ms 8796 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 385 ms 127676 KB Output is correct
2 Correct 386 ms 126504 KB Output is correct
3 Correct 401 ms 127616 KB Output is correct
4 Correct 361 ms 127220 KB Output is correct
5 Correct 317 ms 73000 KB Output is correct
6 Correct 361 ms 135352 KB Output is correct
7 Correct 389 ms 127928 KB Output is correct
8 Correct 359 ms 129284 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6488 KB Output is correct
2 Correct 247 ms 60044 KB Output is correct
3 Correct 946 ms 195244 KB Output is correct
4 Correct 963 ms 193768 KB Output is correct
5 Correct 1178 ms 190884 KB Output is correct
6 Correct 397 ms 90328 KB Output is correct
7 Correct 167 ms 46544 KB Output is correct
8 Correct 16 ms 15140 KB Output is correct
9 Correct 1018 ms 197304 KB Output is correct
10 Correct 1493 ms 186680 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 678 ms 185316 KB Output is correct
2 Correct 311 ms 149460 KB Output is correct
3 Correct 642 ms 135604 KB Output is correct
4 Correct 393 ms 152272 KB Output is correct
5 Correct 322 ms 149712 KB Output is correct
6 Correct 588 ms 129976 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6488 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 6592 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 6488 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 6748 KB Output is correct
17 Correct 2 ms 6748 KB Output is correct
18 Correct 2 ms 6744 KB Output is correct
19 Correct 5 ms 8572 KB Output is correct
20 Correct 5 ms 8540 KB Output is correct
21 Correct 5 ms 8572 KB Output is correct
22 Correct 6 ms 9052 KB Output is correct
23 Correct 10 ms 9564 KB Output is correct
24 Correct 6 ms 8796 KB Output is correct
25 Correct 5 ms 8540 KB Output is correct
26 Correct 5 ms 8796 KB Output is correct
27 Correct 8 ms 10332 KB Output is correct
28 Correct 8 ms 10332 KB Output is correct
29 Correct 8 ms 10448 KB Output is correct
30 Correct 13 ms 12120 KB Output is correct
31 Correct 10 ms 11356 KB Output is correct
32 Correct 10 ms 11608 KB Output is correct
33 Correct 91 ms 38252 KB Output is correct
34 Correct 98 ms 38088 KB Output is correct
35 Correct 110 ms 38068 KB Output is correct
36 Correct 142 ms 50372 KB Output is correct
37 Correct 148 ms 50884 KB Output is correct
38 Correct 193 ms 53188 KB Output is correct
39 Correct 111 ms 12452 KB Output is correct
40 Correct 110 ms 12484 KB Output is correct
41 Correct 109 ms 12488 KB Output is correct
42 Correct 119 ms 13496 KB Output is correct
43 Correct 94 ms 44628 KB Output is correct
44 Correct 93 ms 43900 KB Output is correct
45 Correct 91 ms 44508 KB Output is correct
46 Correct 92 ms 44480 KB Output is correct
47 Correct 98 ms 43648 KB Output is correct
48 Correct 94 ms 44488 KB Output is correct
49 Correct 87 ms 43396 KB Output is correct
50 Correct 90 ms 44004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 6488 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 6592 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 6488 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 6748 KB Output is correct
17 Correct 2 ms 6748 KB Output is correct
18 Correct 2 ms 6744 KB Output is correct
19 Correct 5 ms 8572 KB Output is correct
20 Correct 5 ms 8540 KB Output is correct
21 Correct 5 ms 8572 KB Output is correct
22 Correct 6 ms 9052 KB Output is correct
23 Correct 10 ms 9564 KB Output is correct
24 Correct 6 ms 8796 KB Output is correct
25 Correct 5 ms 8540 KB Output is correct
26 Correct 5 ms 8796 KB Output is correct
27 Correct 385 ms 127676 KB Output is correct
28 Correct 386 ms 126504 KB Output is correct
29 Correct 401 ms 127616 KB Output is correct
30 Correct 361 ms 127220 KB Output is correct
31 Correct 317 ms 73000 KB Output is correct
32 Correct 361 ms 135352 KB Output is correct
33 Correct 389 ms 127928 KB Output is correct
34 Correct 359 ms 129284 KB Output is correct
35 Correct 1 ms 6488 KB Output is correct
36 Correct 247 ms 60044 KB Output is correct
37 Correct 946 ms 195244 KB Output is correct
38 Correct 963 ms 193768 KB Output is correct
39 Correct 1178 ms 190884 KB Output is correct
40 Correct 397 ms 90328 KB Output is correct
41 Correct 167 ms 46544 KB Output is correct
42 Correct 16 ms 15140 KB Output is correct
43 Correct 1018 ms 197304 KB Output is correct
44 Correct 1493 ms 186680 KB Output is correct
45 Correct 678 ms 185316 KB Output is correct
46 Correct 311 ms 149460 KB Output is correct
47 Correct 642 ms 135604 KB Output is correct
48 Correct 393 ms 152272 KB Output is correct
49 Correct 322 ms 149712 KB Output is correct
50 Correct 588 ms 129976 KB Output is correct
51 Correct 8 ms 10332 KB Output is correct
52 Correct 8 ms 10332 KB Output is correct
53 Correct 8 ms 10448 KB Output is correct
54 Correct 13 ms 12120 KB Output is correct
55 Correct 10 ms 11356 KB Output is correct
56 Correct 10 ms 11608 KB Output is correct
57 Correct 91 ms 38252 KB Output is correct
58 Correct 98 ms 38088 KB Output is correct
59 Correct 110 ms 38068 KB Output is correct
60 Correct 142 ms 50372 KB Output is correct
61 Correct 148 ms 50884 KB Output is correct
62 Correct 193 ms 53188 KB Output is correct
63 Correct 111 ms 12452 KB Output is correct
64 Correct 110 ms 12484 KB Output is correct
65 Correct 109 ms 12488 KB Output is correct
66 Correct 119 ms 13496 KB Output is correct
67 Correct 94 ms 44628 KB Output is correct
68 Correct 93 ms 43900 KB Output is correct
69 Correct 91 ms 44508 KB Output is correct
70 Correct 92 ms 44480 KB Output is correct
71 Correct 98 ms 43648 KB Output is correct
72 Correct 94 ms 44488 KB Output is correct
73 Correct 87 ms 43396 KB Output is correct
74 Correct 90 ms 44004 KB Output is correct
75 Correct 397 ms 130144 KB Output is correct
76 Correct 405 ms 128520 KB Output is correct
77 Correct 367 ms 128820 KB Output is correct
78 Correct 409 ms 128952 KB Output is correct
79 Correct 449 ms 129132 KB Output is correct
80 Correct 367 ms 129564 KB Output is correct
81 Correct 912 ms 188332 KB Output is correct
82 Correct 699 ms 179340 KB Output is correct
83 Correct 771 ms 181252 KB Output is correct
84 Correct 1147 ms 205492 KB Output is correct
85 Correct 794 ms 186260 KB Output is correct
86 Correct 685 ms 178212 KB Output is correct
87 Correct 2625 ms 248168 KB Output is correct
88 Correct 381 ms 26460 KB Output is correct
89 Correct 380 ms 25244 KB Output is correct
90 Correct 372 ms 26292 KB Output is correct
91 Correct 392 ms 26900 KB Output is correct
92 Correct 379 ms 26344 KB Output is correct
93 Correct 351 ms 148556 KB Output is correct
94 Correct 2954 ms 99116 KB Output is correct
95 Correct 352 ms 149172 KB Output is correct
96 Correct 374 ms 149368 KB Output is correct
97 Correct 2086 ms 74328 KB Output is correct
98 Correct 386 ms 140468 KB Output is correct
99 Correct 347 ms 148312 KB Output is correct
100 Correct 321 ms 149428 KB Output is correct
101 Correct 506 ms 152388 KB Output is correct
102 Correct 378 ms 148800 KB Output is correct
103 Execution timed out 3025 ms 94480 KB Time limit exceeded
104 Halted 0 ms 0 KB -