CodeCoder vs TopForces
#include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b,id;
}pe[100005];
vector<int>ve[100005];
int mark[100005],ans[100005],tmp;
bool cmpa(const node&x,const node&y)
{
return x.a<y.a;
}
bool cmpb(const node&x,const node&y)
{
return x.b<y.b;
}
void dfs(int u)
{
if(!mark[u])tmp++;
mark[u]=1;
for(int i=0;i<ve[u].size();i++)
{
int v=ve[u][i];
if(!mark[v])dfs(v);
}
}
int main()
{
int n,i;
memset(ans,0,sizeof(ans));
memset(mark,0,sizeof(mark));
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&pe[i].a,&pe[i].b);
pe[i].id=i;
ans[i]=0;
}
sort(pe+1,pe+1+n,cmpa);
for(i=2;i<=n;i++)
ve[pe[i].id].push_back(pe[i-1].id);
sort(pe+1,pe+1+n,cmpb);
for(i=2;i<=n;i++)
ve[pe[i].id].push_back(pe[i-1].id);
tmp=0;
for(int i=1;i<=n;i++)
{
dfs(pe[i].id);
ans[pe[i].id]=tmp-1;
}
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return 0;
}