Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<bits/stdc++.h>#define re register#define FOR(i,L,R) for(re int i=L,i##_end=R;i<=i##_end;i++)#define ROF(i,L,R) for(re int i=R,i##_start=L;i>=i##_start;i--)#define max(a,b) (a>b?a:b)#define min(a,b) (a<b?a:b)using namespace std;int n,x,y;int mp[1005][1005]={0};int ans1=0,ans2=0,ans3=0;int f[1001051];int nx[]={0,1,0,-1},ny[]={1,0,-1,0};inline int find(int x){return f[x]==x?x:f[x]=find(f[x]);}int main(){for(int i=0;i<=1001050;i++) f[i]=i;scanf("%d",&n);for(re int i=1;i<=n;i++){scanf("%d %d",&x,&y);x++,y++,ans1++,ans3+=4;mp[x][y]=1;for(re int j=0;j<4;j++)if(mp[x+nx[j]][y+ny[j]])if(find((x+nx[j])*1000+y+ny[j])!=find(x*1000+y))f[find((x+nx[j])*1000+y+ny[j])]=find(x*1000+y),ans1--,ans3-=2;else ans3-=2;printf("%d %d %d\n",ans1,i,ans3);}return 0;}