This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5+10;
int n;
pair<int, int> a[N];
int b[N], del[N];
map<pair<int, int>, vector<int>> mp;
bool check(int i, int j){
return ((a[i].first-a[j].first)*(a[i].first-a[j].first)+(a[i].second-a[j].second)*(a[i].second-a[j].second))<=(b[i]+b[j])*(b[i]+b[j]);
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int x=0;
cin >> n;
for (int i=1; i<=n; ++i){
cin >> a[i].first >> a[i].second >> b[i];
a[i].first+=1e9; a[i].second+=1e9;
x=max(x, b[i]);
}
vector<int> v(n); iota(v.begin(), v.end(), 1);
sort(v.begin(), v.end(), [&](int k, int l){
return make_pair(b[k], -k)>make_pair(b[l], -l);
});
auto build=[&](){
mp.clear();
for (int i=1; i<=n; ++i) if (!del[i]){
mp[{a[i].first/x, a[i].second/x}].push_back(i);
}
};
build();
for (int i:v){
if (del[i]) continue;
if (b[i]<=x/2){
x/=2;
build();
}
for (int j=a[i].first/x-2; j<=a[i].first/x+2; ++j){
for (int k=a[i].second/x-2; k<=a[i].second/x+2; ++k){
if (!mp.count({j, k})) continue;
for (int l:mp[{j, k}]) if (!del[l] && check(i, l)) del[l]=i;
}
}
}
for (int i=1; i<=n; ++i) cout << del[i] << " \n"[i==n];
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |