General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
85471007 Practice:
luogu_bot5
1140F - 11 C++14 (GCC 6-32) Accepted 608 ms 88068 KB 2020-06-29 18:17:11 2020-06-29 18:17:11
→ Source
#include<bits/stdc++.h>
using namespace std;
const int N=6e5+5;
map<pair<int,int>,int> f;
int x,y,n,l[N],r[N],fa[N],xs[N],ys[N];
stack<pair<int,int>> s;
pair<int,int> e[N];
vector<pair<int,int>> v[N<<1];
long long ans;
void update(int rt,int l,int r,int L,int R,pair<int,int> x)
{
	if(L<=l && r<=R){v[rt].push_back(x);return;}
	int m=l+r>>1;
	if(L<=m)update(rt<<1,l,m,L,R,x);
	if(R>m)update(rt<<1|1,m+1,r,L,R,x);
}
int find(int x){return x==fa[x]?x:find(fa[x]);}
void merge(int x,int y)
{
	x=find(x),y=find(y);
	if(x==y)return;
	ans-=1ll*xs[x]*ys[x]+1ll*xs[y]*ys[y];
	if(xs[x]+ys[x]>xs[y]+ys[y])swap(x,y);
	s.push(make_pair(x,y));
	fa[x]=y,xs[y]+=xs[x],ys[y]+=ys[x];
	ans+=1ll*xs[y]*ys[y];
}
void del(int x,int y)
{
	ans-=1ll*xs[y]*ys[y];
	fa[x]=x,xs[y]-=xs[x],ys[y]-=ys[x];
	ans+=1ll*xs[x]*ys[x]+1ll*xs[y]*ys[y];
}
void query(int rt,int l,int r)
{
	int sum=s.size();
	for(auto u:v[rt])merge(u.first,u.second); 
	if(l==r)printf("%lld ",ans);
	else
	{
		int m=l+r>>1;
		query(rt<<1,l,m);
		query(rt<<1|1,m+1,r);
	}
	while(s.size()>sum)del(s.top().first,s.top().second),s.pop();
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=600000;i++)fa[i]=i,xs[i]=(i<=n),ys[i]=!xs[i];
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&x,&y);
		y+=300000;
		if(f[make_pair(x,y)]==0)
			f[make_pair(x,y)]=i,l[i]=i,r[i]=-1,e[i]=make_pair(x,y);
		else r[f[make_pair(x,y)]]=i-1,f[make_pair(x,y)]=0;
	} 
	for(int i=1;i<=n;i++)
		if(l[i] && r[i]==-1)r[i]=n;
	for(int i=1;i<=n;i++)
		if(l[i])update(1,1,n,l[i],r[i],e[i]);
	query(1,1,n);
} 
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details