Submission #361315

#TimeUsernameProblemLanguageResultExecution timeMemory
361315AmShZCircle selection (APIO18_circle_selection)C++11
7 / 100
3095 ms1048576 KiB
//khodaya khodet komak kon # include <bits/stdc++.h> /* // ordered_set # include <ext/pb_ds/assoc_container.hpp> # include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; # define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> */ using namespace std; typedef long long ll; typedef long double ld; typedef pair <int, int> pii; typedef pair <pii, int> ppi; typedef pair <int, pii> pip; typedef pair <ll, ll> pll; typedef pair <pll, pll> ppp; # define A first # define B second # define endl '\n' # define sep ' ' # define all(x) x.begin(), x.end() # define kill(x) return cout << x << endl, 0 # define SZ(x) int(x.size()) # define lc id << 1 # define rc id << 1 | 1 # define InTheNameOfGod ios::sync_with_stdio(0);cin.tie(0); cout.tie(0); ll power(ll a, ll b, ll md) {return (!b ? 1 : (b & 1 ? a * power(a * a % md, b / 2, md) % md : power(a * a % md, b / 2, md) % md));} const int xn = 3e5 + 10; const int xm = - 20 + 10; const int sq = 320; const int inf = 1e9 + 10; const ll INF = 1e18 + 10; const int mod = 998244353; const int base = 257; int n, ans[xn]; ppp a[xn]; vector <int> adj[xn]; set <pii> st[2]; bool mark[xn]; void solve(){ for (int i = 1; i <= n; ++ i){ int id = a[i].A.B; int x = a[i].B.A, y = a[i].B.B; int l = x + a[i].A.A, r = x - a[i].A.A; if (st[0].find({l, id}) == st[0].end()) continue; ans[id] = id; st[0].erase({l, id}), st[1].erase({- r, id}); while (st[0].lower_bound({l, id}) != st[0].end()){ pii x = *st[0].lower_bound({l, id}); if (x.A > r) break; ans[x.B] = id; st[0].erase(x); st[1].erase({a[x.B].A.A - a[x.B].B.A, x.B}); } while (st[1].lower_bound({- r, id}) != st[1].end()){ pii x = *st[1].lower_bound({- r, id}); if (- x.A < l) break; ans[x.B] = id; st[1].erase(x); st[0].erase({a[x.B].B.A + a[x.B].A.A, x.B}); } } for (int i = 1; i <= n; ++ i) cout << ans[i] << sep; cout << endl; } int main(){ InTheNameOfGod; cin >> n; for (int i = 1; i <= n; ++ i){ cin >> a[i].B.A >> a[i].B.B >> a[i].A.A; a[i].A.B = i; st[0].insert({a[i].B.A - a[i].A.A, i}); st[1].insert({a[i].A.A - a[i].B.A, i}); a[i].A.A *= - 1; } for (int i = 1; i <= n; ++ i){ for (int j = 1; j <= n; ++ j){ ll x = abs(a[i].B.A - a[j].B.A); ll y = abs(a[i].B.B - a[j].B.B); ll z = - a[i].A.A - a[j].A.A; if (x * x + y * y <= z * z) adj[i].push_back(j); } } sort(a + 1, a + n + 1); if (n > 5e3){ solve(); return 0; } for (int i = 1; i <= n; ++ i){ if (mark[a[i].A.B]) continue; for (int u : adj[a[i].A.B]) if (!mark[u]) mark[u] = true, ans[u] = a[i].A.B; } for (int i = 1; i <= n; ++ i) cout << ans[i] << sep; cout << endl; return 0; }

Compilation message (stderr)

circle_selection.cpp: In function 'void solve()':
circle_selection.cpp:52:21: warning: unused variable 'y' [-Wunused-variable]
   52 |   int x = a[i].B.A, y = a[i].B.B;
      |                     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...