Submission #397455

# Submission time Handle Problem Language Result Execution time Memory
397455 2021-05-02T09:27:55 Z AriaH Circle selection (APIO18_circle_selection) C++11
7 / 100
3000 ms 317420 KB
/** vaziat sorati ghermeze **/
 
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
#include <bits/stdc++.h>
using namespace std;
 
typedef long long                   ll;
typedef long double                 ld;
typedef pair<int,int>               pii;
typedef pair<ll,ll>                 pll;
#define all(x)                      (x).begin(),(x).end()
#define F                           first
#define S                           second
#define Mp                          make_pair
#define SZ(x)			    		(int)x.size()
#define fast_io                     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define file_io                     freopen("in.txt" , "r+" , stdin) ; freopen("out.txt" , "w+" , stdout);
 
const int N = 3e5 + 10;
 
int n, id[N], ord[N], Ans[N];
 
ll X[N], Y[N], R[N], base[N];
 
vector < ll > cm, Vec;
 
set < pll > seg[N << 2];
 
bool cmp(int i, int j) { return R[i] > R[j]; }
 
inline int lwr(ll x) { return lower_bound(all(cm), x) - cm.begin(); }
 
inline bool cross(int i, int j)
{
    return (base[i] + base[j] + 2 * (X[i] * X[j] + Y[i] * Y[j] + R[i] * R[j])) >= 0;
}
 
void upd(pii x, int p, int v = 1, int tl = 0, int tr = SZ(cm))
{
	if(p > tr || p < tl) return;
	seg[v].insert(x);
	if(tl == tr) return;
	int mid = (tl + tr) >> 1;
	upd(x, p, v << 1, tl, mid);
	upd(x, p, v << 1 | 1, mid + 1, tr);
}
 
void get(int l, int r, int v = 1, int tl = 0, int tr = SZ(cm))
{
	if(l > tr || r < tl || l > r) return;
	if(l <= tl && tr <= r)
	{
		Vec.push_back(v);
		return;
	}
	int mid = (tl + tr) >> 1;
	get(l, r, v << 1, tl, mid);
	get(l, r, v << 1 | 1, mid + 1, tr);
}
 
int main()
{
	scanf("%d", &n);
	for(int i = 1; i <= n; i ++)
	{
		scanf("%lld%lld%lld", &X[i], &Y[i], &R[i]);
		cm.push_back(X[i]);
		ord[i] = i;
		base[i] = R[i] * R[i] - X[i] * X[i] - Y[i] * Y[i];
	}
	sort(ord + 1, ord + n + 1, cmp);
	sort(all(cm));
	cm.resize(unique(all(cm)) - cm.begin());
	for(int i = 1; i <= n; i ++)
	{
		id[i] = lwr(X[i]);
		upd(Mp(Y[i], i), id[i]);
	}
	for(int i = 1; i <= n; i ++)
	{
		int I = ord[i];
		if(Ans[I]) continue;
		ll l = lwr(X[I] - 2 * R[I]), r = lwr(X[I] + 2 * R[I] + 1) - 1, d = Y[I] - 2 * R[I], up = Y[I] + 2 * R[I];
		if(l > r) continue;
		Vec.clear();
		get(l, r);
		for(auto now : Vec)
		{
			pii last = Mp(d, -1);
			while(1)
			{
				auto it = seg[now].upper_bound(last);
				if(it == seg[now].end()) break;
				last = *it;
				if(Ans[it->S])
				{
					seg[now].erase(it);
					continue;
				}
				if(it->F <= up)
				{
					if(cross(it->S, I))
					{
						Ans[it->S] = I;
						seg[now].erase(it);
					}
					else
					{
						continue;
					}
				}
				else
				{
					break;
				}
			}
		}
	}
	for(int i = 1; i <= n; i ++)
	{
		printf("%d ", Ans[i]);
	}
    return 0;
}
 
/** test corner cases(n = 1?) watch for overflow or minus indices **/

Compilation message

circle_selection.cpp:3: warning: ignoring #pragma comment  [-Wunknown-pragmas]
    3 | #pragma comment(linker, "/stack:200000000")
      | 
circle_selection.cpp: In function 'int main()':
circle_selection.cpp:65:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   65 |  scanf("%d", &n);
      |  ~~~~~^~~~~~~~~~
circle_selection.cpp:68:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   68 |   scanf("%lld%lld%lld", &X[i], &Y[i], &R[i]);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 47 ms 56644 KB Output is correct
2 Correct 35 ms 56644 KB Output is correct
3 Correct 38 ms 56708 KB Output is correct
4 Correct 34 ms 56700 KB Output is correct
5 Correct 34 ms 56696 KB Output is correct
6 Correct 35 ms 56680 KB Output is correct
7 Correct 36 ms 56724 KB Output is correct
8 Correct 44 ms 56652 KB Output is correct
9 Correct 36 ms 56700 KB Output is correct
10 Correct 40 ms 56644 KB Output is correct
11 Correct 34 ms 56652 KB Output is correct
12 Correct 34 ms 56728 KB Output is correct
13 Correct 34 ms 56652 KB Output is correct
14 Correct 36 ms 56644 KB Output is correct
15 Correct 35 ms 56652 KB Output is correct
16 Correct 36 ms 57392 KB Output is correct
17 Correct 44 ms 57448 KB Output is correct
18 Correct 42 ms 57440 KB Output is correct
19 Correct 69 ms 61252 KB Output is correct
20 Correct 65 ms 61252 KB Output is correct
21 Correct 63 ms 61216 KB Output is correct
22 Correct 66 ms 61288 KB Output is correct
23 Correct 73 ms 61252 KB Output is correct
24 Correct 63 ms 61272 KB Output is correct
25 Correct 72 ms 61300 KB Output is correct
26 Correct 71 ms 61292 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 3071 ms 317420 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 35 ms 56652 KB Output is correct
2 Correct 1782 ms 173192 KB Output is correct
3 Execution timed out 3058 ms 310976 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 3081 ms 314392 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 47 ms 56644 KB Output is correct
2 Correct 35 ms 56644 KB Output is correct
3 Correct 38 ms 56708 KB Output is correct
4 Correct 34 ms 56700 KB Output is correct
5 Correct 34 ms 56696 KB Output is correct
6 Correct 35 ms 56680 KB Output is correct
7 Correct 36 ms 56724 KB Output is correct
8 Correct 44 ms 56652 KB Output is correct
9 Correct 36 ms 56700 KB Output is correct
10 Correct 40 ms 56644 KB Output is correct
11 Correct 34 ms 56652 KB Output is correct
12 Correct 34 ms 56728 KB Output is correct
13 Correct 34 ms 56652 KB Output is correct
14 Correct 36 ms 56644 KB Output is correct
15 Correct 35 ms 56652 KB Output is correct
16 Correct 36 ms 57392 KB Output is correct
17 Correct 44 ms 57448 KB Output is correct
18 Correct 42 ms 57440 KB Output is correct
19 Correct 69 ms 61252 KB Output is correct
20 Correct 65 ms 61252 KB Output is correct
21 Correct 63 ms 61216 KB Output is correct
22 Correct 66 ms 61288 KB Output is correct
23 Correct 73 ms 61252 KB Output is correct
24 Correct 63 ms 61272 KB Output is correct
25 Correct 72 ms 61300 KB Output is correct
26 Correct 71 ms 61292 KB Output is correct
27 Correct 92 ms 66188 KB Output is correct
28 Correct 86 ms 66204 KB Output is correct
29 Correct 91 ms 66180 KB Output is correct
30 Correct 104 ms 66184 KB Output is correct
31 Correct 102 ms 66228 KB Output is correct
32 Correct 100 ms 66164 KB Output is correct
33 Correct 1503 ms 173216 KB Output is correct
34 Correct 1524 ms 173068 KB Output is correct
35 Correct 1522 ms 173040 KB Output is correct
36 Correct 1666 ms 173112 KB Output is correct
37 Correct 1690 ms 173056 KB Output is correct
38 Correct 1654 ms 173064 KB Output is correct
39 Incorrect 2547 ms 128332 KB Output isn't correct
40 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 47 ms 56644 KB Output is correct
2 Correct 35 ms 56644 KB Output is correct
3 Correct 38 ms 56708 KB Output is correct
4 Correct 34 ms 56700 KB Output is correct
5 Correct 34 ms 56696 KB Output is correct
6 Correct 35 ms 56680 KB Output is correct
7 Correct 36 ms 56724 KB Output is correct
8 Correct 44 ms 56652 KB Output is correct
9 Correct 36 ms 56700 KB Output is correct
10 Correct 40 ms 56644 KB Output is correct
11 Correct 34 ms 56652 KB Output is correct
12 Correct 34 ms 56728 KB Output is correct
13 Correct 34 ms 56652 KB Output is correct
14 Correct 36 ms 56644 KB Output is correct
15 Correct 35 ms 56652 KB Output is correct
16 Correct 36 ms 57392 KB Output is correct
17 Correct 44 ms 57448 KB Output is correct
18 Correct 42 ms 57440 KB Output is correct
19 Correct 69 ms 61252 KB Output is correct
20 Correct 65 ms 61252 KB Output is correct
21 Correct 63 ms 61216 KB Output is correct
22 Correct 66 ms 61288 KB Output is correct
23 Correct 73 ms 61252 KB Output is correct
24 Correct 63 ms 61272 KB Output is correct
25 Correct 72 ms 61300 KB Output is correct
26 Correct 71 ms 61292 KB Output is correct
27 Execution timed out 3071 ms 317420 KB Time limit exceeded
28 Halted 0 ms 0 KB -