#include<bits/stdc++.h>
#define pb emplace_back
#define AI(i) begin(i), end(i)
using namespace std;
using ll = long long;
#ifdef KEV
#define DE(args...) kout("[ " + string(#args) + " ] = ", args)
void debug(auto L, auto R) { while (L < R) cerr << *L << " \n"[L+1==R], ++L; }
void kout(){ cerr << endl; }
template<class T1, class ...T2> void kout(T1 a, T2 ...e) { cerr << a << ' ', kout(e...); }
#else
#define DE(...) 0
#define debug(...) 0
#endif
const int MAX_N = 300010, MAX_K = 32;
int n;
ll up(ll v) { return v * v; }
int die[MAX_N];
struct cir {
ll x, y, r, id;
pair<int,int> div(int d) {
return {x/d, y/d};
}
friend bool inter(cir a, cir b) {
return up(a.x-b.x) + up(a.y-b.y) <= up(a.r+b.r);
}
bool operator < (cir a) {
return make_pair(-r, id) < make_pair(-a.r, a.id);
}
bool set(cir killer) {
if (die[id] != -1)
return true;
if (inter(killer, *(this)))
return die[id] = killer.id, true;
return false;
}
bool dead() { return die[id] != -1; }
friend istream& operator >> (istream& in, cir &a) {
static int cnt;
//const static ll dx = 12398291, dy = -23412845234;
const static ll dx = 0, dy = 0;
return a.id = cnt++, in >> a.x >> a.y >> a.r, a.x += dx, a.y += dy, in;
}
}a[MAX_N];
void brute_force() {
for (int i = 0;i < n;++i) {
int id = a[i].id;
if (~die[id]) continue;
die[id] = id;
for (int j = i+1;j < n;++j)
a[j].set(a[i]);
}
}
//random_device rd;
//mt19937 gen(rd());
//uniform_int_
//struct hs {
// size_t operator()(pair<int,int> a) const {
// const static unsigned long long f = 9823419848328479ll;
// return f * a.first - a.second + (a.first ^ a.second);
// }
//};
//
//unordered_map<pair<int,int>, vector<int>, hs> mp[MAX_K];
struct allcir {
vector<pair<int,vector<pair<int,int>>>> mp;
ll block_size = 1ll << 31;
void shrink(ll sz) {
if (sz < block_size)
block_size = sz, putall();
}
void putall() {
mp.clear();
vector<pair< pair<int,int> , int > > allp;
for (int i = 0;i < n;++i) if (!a[i].dead())
allp.pb( a[i].div(block_size), i );
sort(AI(allp));
for (auto [P, id] : allp) {
if (mp.empty() || P.first != mp.back().first)
mp.pb(P.first, 0);
mp.back().second.pb(P.second, id);
}
for (auto &[x, v] : mp)
sort(AI(v));
}
void killall(cir a) {
auto [x, y] = a.div(block_size);
auto it = lower_bound(AI(mp), pair<int,vector<pair<int,int>>>{x-2, vector<pair<int,int>>{}});
while (it != end(mp) && x + 2 >= it->first) {
auto &vec = it->second;
auto vit = lower_bound(AI(vec), pair<int,int>{ y - 2, -1});
while (vit != end(vec) && y + 2 >= vit->first)
::a[vit->second].set(a), ++vit;
++it;
}
}
}grid;
void solve_all() {
// for (int i = 0;i < n;++i) {
// for (int j = 0;j < MAX_K;++j)
// mp[j][ a[i].div(1ll<<j) ].pb(i);
// }
grid.putall();
for (int i = 0;i < n;++i) {
if (a[i].dead())
continue;
a[i].set(a[i]);
int j = 0;
while ((1ll<<j) < a[i].r)
++j;
grid.shrink(1ll << j);
grid.killall(a[i]);
// for (int r : {j}) {
// grid.killall(a[i]);
// auto &mp = ::mp[r];
// auto [x, y] = a[i].div(1ll << r);
// for (int nx : {x-2, x-1, x, x+1, x+2})
// for (int ny : {y-2, y-1, y, y+1, y+2})
// if (mp.count({nx, ny})) {
// auto &V = mp[{nx, ny}];
// vector<int> nv;
// for (int j : V)
// if (!a[j].set(a[i]))
// nv.pb(j);
// swap(nv, V);
// }
// break;
// }
}
}
//void testmap() {
// mp.reserve(n * 10);
// int rad = a[0].r ;
// for (int i = 1;i < n;++i)
// if (rad != a[i].r) exit(1);
//
// rad <<= 1;
//
// for (int i = 0;i < n;++i)
// mp[ a[i].div(rad) ].pb(i);
//
// for (int i = 0;i < n;++i) {
// if (a[i].dead()) continue;
// a[i].set(a[i]);
// auto [x, y] = a[i].div(rad);
//
// for (int nx : {x-1, x, x+1})
// for (int ny : {y-1, y, y+1})
// if (mp.count({nx, ny})) {
// auto &V = mp[{nx, ny}];
// vector<int> nv;
// for (int j : V)
// if (!a[j].set(a[i]))
// nv.pb(j);
// swap(nv, V);
// }
// }
//}
void solve() {
sort(a, a+n);
fill(die, die+n, -1);
solve_all();
}
signed main(){
ios_base::sync_with_stdio(0), cin.tie(0);
cin >> n;
for (int i = 0;i < n;++i)
cin >> a[i];
solve();
for (int i = 0;i < n;++i)
cout << die[i]+1 << " \n"[i+1==n];
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
0 ms |
384 KB |
Output is correct |
3 |
Correct |
0 ms |
384 KB |
Output is correct |
4 |
Correct |
0 ms |
384 KB |
Output is correct |
5 |
Correct |
0 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
1 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
11 |
Correct |
1 ms |
384 KB |
Output is correct |
12 |
Correct |
1 ms |
384 KB |
Output is correct |
13 |
Correct |
1 ms |
384 KB |
Output is correct |
14 |
Correct |
1 ms |
384 KB |
Output is correct |
15 |
Correct |
1 ms |
384 KB |
Output is correct |
16 |
Correct |
1 ms |
384 KB |
Output is correct |
17 |
Correct |
1 ms |
512 KB |
Output is correct |
18 |
Correct |
1 ms |
384 KB |
Output is correct |
19 |
Correct |
7 ms |
948 KB |
Output is correct |
20 |
Correct |
4 ms |
948 KB |
Output is correct |
21 |
Correct |
4 ms |
896 KB |
Output is correct |
22 |
Correct |
6 ms |
948 KB |
Output is correct |
23 |
Correct |
7 ms |
920 KB |
Output is correct |
24 |
Correct |
6 ms |
968 KB |
Output is correct |
25 |
Correct |
6 ms |
1204 KB |
Output is correct |
26 |
Correct |
7 ms |
980 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
241 ms |
29796 KB |
Output is correct |
2 |
Correct |
256 ms |
27736 KB |
Output is correct |
3 |
Correct |
255 ms |
29140 KB |
Output is correct |
4 |
Correct |
232 ms |
29648 KB |
Output is correct |
5 |
Correct |
287 ms |
27092 KB |
Output is correct |
6 |
Correct |
357 ms |
30808 KB |
Output is correct |
7 |
Correct |
310 ms |
27348 KB |
Output is correct |
8 |
Correct |
302 ms |
28244 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
150 ms |
10144 KB |
Output is correct |
3 |
Correct |
469 ms |
30676 KB |
Output is correct |
4 |
Correct |
481 ms |
30680 KB |
Output is correct |
5 |
Correct |
513 ms |
28648 KB |
Output is correct |
6 |
Correct |
226 ms |
15336 KB |
Output is correct |
7 |
Correct |
105 ms |
8720 KB |
Output is correct |
8 |
Correct |
18 ms |
2348 KB |
Output is correct |
9 |
Correct |
516 ms |
31188 KB |
Output is correct |
10 |
Correct |
479 ms |
29572 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
371 ms |
30584 KB |
Output is correct |
2 |
Correct |
376 ms |
48212 KB |
Output is correct |
3 |
Correct |
320 ms |
28244 KB |
Output is correct |
4 |
Correct |
388 ms |
48576 KB |
Output is correct |
5 |
Correct |
383 ms |
48852 KB |
Output is correct |
6 |
Correct |
335 ms |
30588 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
0 ms |
384 KB |
Output is correct |
3 |
Correct |
0 ms |
384 KB |
Output is correct |
4 |
Correct |
0 ms |
384 KB |
Output is correct |
5 |
Correct |
0 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
1 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
11 |
Correct |
1 ms |
384 KB |
Output is correct |
12 |
Correct |
1 ms |
384 KB |
Output is correct |
13 |
Correct |
1 ms |
384 KB |
Output is correct |
14 |
Correct |
1 ms |
384 KB |
Output is correct |
15 |
Correct |
1 ms |
384 KB |
Output is correct |
16 |
Correct |
1 ms |
384 KB |
Output is correct |
17 |
Correct |
1 ms |
512 KB |
Output is correct |
18 |
Correct |
1 ms |
384 KB |
Output is correct |
19 |
Correct |
7 ms |
948 KB |
Output is correct |
20 |
Correct |
4 ms |
948 KB |
Output is correct |
21 |
Correct |
4 ms |
896 KB |
Output is correct |
22 |
Correct |
6 ms |
948 KB |
Output is correct |
23 |
Correct |
7 ms |
920 KB |
Output is correct |
24 |
Correct |
6 ms |
968 KB |
Output is correct |
25 |
Correct |
6 ms |
1204 KB |
Output is correct |
26 |
Correct |
7 ms |
980 KB |
Output is correct |
27 |
Correct |
8 ms |
1432 KB |
Output is correct |
28 |
Correct |
8 ms |
1528 KB |
Output is correct |
29 |
Correct |
8 ms |
1400 KB |
Output is correct |
30 |
Correct |
12 ms |
1400 KB |
Output is correct |
31 |
Correct |
14 ms |
1656 KB |
Output is correct |
32 |
Correct |
13 ms |
1528 KB |
Output is correct |
33 |
Correct |
78 ms |
11064 KB |
Output is correct |
34 |
Correct |
79 ms |
11064 KB |
Output is correct |
35 |
Correct |
89 ms |
9836 KB |
Output is correct |
36 |
Correct |
148 ms |
11444 KB |
Output is correct |
37 |
Correct |
142 ms |
11440 KB |
Output is correct |
38 |
Correct |
151 ms |
11316 KB |
Output is correct |
39 |
Correct |
439 ms |
8636 KB |
Output is correct |
40 |
Correct |
421 ms |
8520 KB |
Output is correct |
41 |
Correct |
441 ms |
8528 KB |
Output is correct |
42 |
Correct |
99 ms |
8888 KB |
Output is correct |
43 |
Correct |
113 ms |
14408 KB |
Output is correct |
44 |
Correct |
109 ms |
14408 KB |
Output is correct |
45 |
Correct |
111 ms |
14376 KB |
Output is correct |
46 |
Correct |
111 ms |
14520 KB |
Output is correct |
47 |
Correct |
110 ms |
14408 KB |
Output is correct |
48 |
Correct |
110 ms |
14404 KB |
Output is correct |
49 |
Correct |
113 ms |
14552 KB |
Output is correct |
50 |
Correct |
115 ms |
14408 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Correct |
0 ms |
384 KB |
Output is correct |
3 |
Correct |
0 ms |
384 KB |
Output is correct |
4 |
Correct |
0 ms |
384 KB |
Output is correct |
5 |
Correct |
0 ms |
384 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
1 ms |
384 KB |
Output is correct |
8 |
Correct |
1 ms |
384 KB |
Output is correct |
9 |
Correct |
1 ms |
384 KB |
Output is correct |
10 |
Correct |
1 ms |
384 KB |
Output is correct |
11 |
Correct |
1 ms |
384 KB |
Output is correct |
12 |
Correct |
1 ms |
384 KB |
Output is correct |
13 |
Correct |
1 ms |
384 KB |
Output is correct |
14 |
Correct |
1 ms |
384 KB |
Output is correct |
15 |
Correct |
1 ms |
384 KB |
Output is correct |
16 |
Correct |
1 ms |
384 KB |
Output is correct |
17 |
Correct |
1 ms |
512 KB |
Output is correct |
18 |
Correct |
1 ms |
384 KB |
Output is correct |
19 |
Correct |
7 ms |
948 KB |
Output is correct |
20 |
Correct |
4 ms |
948 KB |
Output is correct |
21 |
Correct |
4 ms |
896 KB |
Output is correct |
22 |
Correct |
6 ms |
948 KB |
Output is correct |
23 |
Correct |
7 ms |
920 KB |
Output is correct |
24 |
Correct |
6 ms |
968 KB |
Output is correct |
25 |
Correct |
6 ms |
1204 KB |
Output is correct |
26 |
Correct |
7 ms |
980 KB |
Output is correct |
27 |
Correct |
241 ms |
29796 KB |
Output is correct |
28 |
Correct |
256 ms |
27736 KB |
Output is correct |
29 |
Correct |
255 ms |
29140 KB |
Output is correct |
30 |
Correct |
232 ms |
29648 KB |
Output is correct |
31 |
Correct |
287 ms |
27092 KB |
Output is correct |
32 |
Correct |
357 ms |
30808 KB |
Output is correct |
33 |
Correct |
310 ms |
27348 KB |
Output is correct |
34 |
Correct |
302 ms |
28244 KB |
Output is correct |
35 |
Correct |
1 ms |
384 KB |
Output is correct |
36 |
Correct |
150 ms |
10144 KB |
Output is correct |
37 |
Correct |
469 ms |
30676 KB |
Output is correct |
38 |
Correct |
481 ms |
30680 KB |
Output is correct |
39 |
Correct |
513 ms |
28648 KB |
Output is correct |
40 |
Correct |
226 ms |
15336 KB |
Output is correct |
41 |
Correct |
105 ms |
8720 KB |
Output is correct |
42 |
Correct |
18 ms |
2348 KB |
Output is correct |
43 |
Correct |
516 ms |
31188 KB |
Output is correct |
44 |
Correct |
479 ms |
29572 KB |
Output is correct |
45 |
Correct |
371 ms |
30584 KB |
Output is correct |
46 |
Correct |
376 ms |
48212 KB |
Output is correct |
47 |
Correct |
320 ms |
28244 KB |
Output is correct |
48 |
Correct |
388 ms |
48576 KB |
Output is correct |
49 |
Correct |
383 ms |
48852 KB |
Output is correct |
50 |
Correct |
335 ms |
30588 KB |
Output is correct |
51 |
Correct |
8 ms |
1432 KB |
Output is correct |
52 |
Correct |
8 ms |
1528 KB |
Output is correct |
53 |
Correct |
8 ms |
1400 KB |
Output is correct |
54 |
Correct |
12 ms |
1400 KB |
Output is correct |
55 |
Correct |
14 ms |
1656 KB |
Output is correct |
56 |
Correct |
13 ms |
1528 KB |
Output is correct |
57 |
Correct |
78 ms |
11064 KB |
Output is correct |
58 |
Correct |
79 ms |
11064 KB |
Output is correct |
59 |
Correct |
89 ms |
9836 KB |
Output is correct |
60 |
Correct |
148 ms |
11444 KB |
Output is correct |
61 |
Correct |
142 ms |
11440 KB |
Output is correct |
62 |
Correct |
151 ms |
11316 KB |
Output is correct |
63 |
Correct |
439 ms |
8636 KB |
Output is correct |
64 |
Correct |
421 ms |
8520 KB |
Output is correct |
65 |
Correct |
441 ms |
8528 KB |
Output is correct |
66 |
Correct |
99 ms |
8888 KB |
Output is correct |
67 |
Correct |
113 ms |
14408 KB |
Output is correct |
68 |
Correct |
109 ms |
14408 KB |
Output is correct |
69 |
Correct |
111 ms |
14376 KB |
Output is correct |
70 |
Correct |
111 ms |
14520 KB |
Output is correct |
71 |
Correct |
110 ms |
14408 KB |
Output is correct |
72 |
Correct |
110 ms |
14404 KB |
Output is correct |
73 |
Correct |
113 ms |
14552 KB |
Output is correct |
74 |
Correct |
115 ms |
14408 KB |
Output is correct |
75 |
Correct |
291 ms |
30252 KB |
Output is correct |
76 |
Correct |
269 ms |
29664 KB |
Output is correct |
77 |
Correct |
255 ms |
34004 KB |
Output is correct |
78 |
Correct |
239 ms |
33748 KB |
Output is correct |
79 |
Correct |
390 ms |
29528 KB |
Output is correct |
80 |
Correct |
246 ms |
33748 KB |
Output is correct |
81 |
Correct |
500 ms |
31676 KB |
Output is correct |
82 |
Correct |
464 ms |
32084 KB |
Output is correct |
83 |
Correct |
477 ms |
32472 KB |
Output is correct |
84 |
Correct |
467 ms |
30932 KB |
Output is correct |
85 |
Correct |
469 ms |
30420 KB |
Output is correct |
86 |
Correct |
470 ms |
32088 KB |
Output is correct |
87 |
Correct |
495 ms |
30764 KB |
Output is correct |
88 |
Correct |
1529 ms |
26732 KB |
Output is correct |
89 |
Correct |
1348 ms |
26624 KB |
Output is correct |
90 |
Correct |
1378 ms |
26468 KB |
Output is correct |
91 |
Correct |
1360 ms |
26640 KB |
Output is correct |
92 |
Correct |
1337 ms |
26612 KB |
Output is correct |
93 |
Correct |
454 ms |
48088 KB |
Output is correct |
94 |
Correct |
407 ms |
30428 KB |
Output is correct |
95 |
Correct |
471 ms |
48104 KB |
Output is correct |
96 |
Correct |
450 ms |
48244 KB |
Output is correct |
97 |
Correct |
480 ms |
27748 KB |
Output is correct |
98 |
Correct |
391 ms |
32852 KB |
Output is correct |
99 |
Correct |
452 ms |
48336 KB |
Output is correct |
100 |
Correct |
407 ms |
47952 KB |
Output is correct |
101 |
Correct |
431 ms |
29916 KB |
Output is correct |
102 |
Correct |
454 ms |
48216 KB |
Output is correct |
103 |
Correct |
546 ms |
27876 KB |
Output is correct |
104 |
Correct |
440 ms |
47828 KB |
Output is correct |
105 |
Correct |
340 ms |
27416 KB |
Output is correct |
106 |
Correct |
384 ms |
41688 KB |
Output is correct |
107 |
Correct |
383 ms |
41684 KB |
Output is correct |
108 |
Correct |
399 ms |
41684 KB |
Output is correct |
109 |
Correct |
376 ms |
41692 KB |
Output is correct |
110 |
Correct |
383 ms |
41696 KB |
Output is correct |
111 |
Correct |
379 ms |
41692 KB |
Output is correct |
112 |
Correct |
375 ms |
41684 KB |
Output is correct |
113 |
Correct |
374 ms |
41684 KB |
Output is correct |
114 |
Correct |
384 ms |
41780 KB |
Output is correct |
115 |
Correct |
376 ms |
41812 KB |
Output is correct |
116 |
Correct |
382 ms |
48856 KB |
Output is correct |