Submission #963462

#TimeUsernameProblemLanguageResultExecution timeMemory
963462nguyentunglamCircle selection (APIO18_circle_selection)C++17
100 / 100
1266 ms108856 KiB
#include<bits/stdc++.h> #define all(v) v.begin(), v.end() #define endl "\n" #define int long long using namespace std; const int N = 3e5 + 10; int n; int x[N], y[N], r[N], dd[N]; int ans[N]; int R; vector<int> arr[N]; vector<pair<int, int> > rrh; int idx (int x, int y) { int ret = upper_bound(all(rrh), make_pair(x, y)) - rrh.begin(); if (rrh[ret - 1].first == x && rrh[ret - 1].second == y) return ret; return 0; } void rebuild () { rrh.clear(); for(int i = 1; i <= n; i++) rrh.emplace_back(x[i] / R, y[i] / R); sort(all(rrh)); rrh.resize(unique(all(rrh)) - rrh.begin()); for(int i = 1; i <= rrh.size(); i++) arr[i].clear(), dd[i] = 0; for(int i = 1; i <= n; i++) { arr[idx(x[i] / R, y[i] / R)].push_back(i); } } int32_t main() { #define task "" cin.tie(0) -> sync_with_stdio(0); if (fopen("task.inp", "r")) { freopen("task.inp", "r", stdin); freopen("task.out", "w", stdout); } if (fopen(task".inp", "r")) { freopen (task".inp", "r", stdin); freopen (task".out", "w", stdout); } cin >> n; for(int i = 1; i <= n; i++) cin >> x[i] >> y[i] >> r[i]; vector<pair<int, int> > order; for(int i = 1; i <= n; i++) order.emplace_back(r[i], -i); sort(all(order), greater<pair<int, int> > ()); R = order[0].first; rebuild(); for(auto &[radius, i] : order) { i = -i; // cout << i << " " << ans[i] << endl; if (ans[i]) continue; int cur = idx(x[i] / R, y[i] / R); if (dd[cur]) { R = radius; rebuild(); } else dd[cur] = 1; for(int deltax = -2; deltax <= 2; deltax++) for(int deltay = -2; deltay <= 2; deltay++) { int pos = idx(x[i] / R + deltax, y[i] / R + deltay); for(auto &j : arr[pos]) if (!ans[j]) { if (1LL * (x[i] - x[j]) * (x[i] - x[j]) + 1LL * (y[i] - y[j]) * (y[i] - y[j]) <= 1LL * (r[i] + r[j]) * (r[i] + r[j])) { ans[j] = i; } } } } for(int i = 1; i <= n; i++) cout << ans[i] << " "; }

Compilation message (stderr)

circle_selection.cpp: In function 'void rebuild()':
circle_selection.cpp:34:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |   for(int i = 1; i <= rrh.size(); i++) arr[i].clear(), dd[i] = 0;
      |                  ~~^~~~~~~~~~~~~
circle_selection.cpp: In function 'int32_t main()':
circle_selection.cpp:47:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |     freopen("task.inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
circle_selection.cpp:48:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |     freopen("task.out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
circle_selection.cpp:52:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |     freopen (task".inp", "r", stdin);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
circle_selection.cpp:53:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   53 |     freopen (task".out", "w", stdout);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...