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 <iostream>
#include <cmath>
using namespace std;
long long int k[300005],n,x[500005],y[500005],ri[500005],id[500005],tmp[500005][4],tag[500005],ans[500005];
int qs(int s,int e)
{
int l=s,mid=(s+e)/2,r=mid+1,p=l;
if(mid>s)qs(s,mid);
if(e>mid+1)qs(mid+1,e);
while(l<=mid && r<=e)
{
if(ri[l]>ri[r] || (ri[l]==ri[r] && id[l]<id[r]))
{
tmp[p][0]=x[l];
tmp[p][1]=y[l];
tmp[p][2]=ri[l];
tmp[p][3]=id[l];
l++;
p++;
}
else
{
tmp[p][0]=x[r];
tmp[p][1]=y[r];
tmp[p][2]=ri[r];
tmp[p][3]=id[r];
r++;
p++;
}
}
while(l<=mid)
{
tmp[p][0]=x[l];
tmp[p][1]=y[l];
tmp[p][2]=ri[l];
tmp[p][3]=id[l];
l++;
p++;
}
while(r<=e)
{
tmp[p][0]=x[r];
tmp[p][1]=y[r];
tmp[p][2]=ri[r];
tmp[p][3]=id[r];
p++;
r++;
}
for(int i=s;i<=e;i++)
{
x[i]=tmp[i][0];
y[i]=tmp[i][1];
ri[i]=tmp[i][2];
id[i]=tmp[i][3];
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i]>>ri[i];
id[i]=i;
}
qs(1,n);
for(int i=1;i<=n;i++)
{
if(tag[i]==1)continue;
ans[id[i]]=id[i];
tag[i]=1;
for(int j=1;j<=n;j++)
{
if(tag[j]==1 || sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))>(ri[i]+ri[j]))continue;
ans[id[j]]=id[i];
tag[j]=1;
}
}
for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
}
Compilation message (stderr)
circle_selection.cpp: In function 'int qs(int, int)':
circle_selection.cpp:57:1: warning: no return statement in function returning non-void [-Wreturn-type]
}
^
# | 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... |