General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
177871059 Practice:
grass8sheep
1140F - 11 C++14 (GCC 6-32) Accepted 686 ms 83192 KB 2022-10-25 15:17:49 2022-10-25 15:17:49
→ Source
// LUOGU_RID: 91517076
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int n=3e5;
int f[601000],s1[601000],s2[601000];
int top,U[600010],V[601000];
int q;
map<int,int>kp[301000];
struct ed{int u,v;};
vector<ed>g[1210000];
void up(int p,int l,int r,int x,int y,ed z){
	if(x<=l&&r<=y){
		g[p].push_back(z);
		return;
	}
	if(y<l||x>r)return;
	int mid=(l+r)>>1;
	up(p<<1,l,mid,x,y,z),up(p<<1|1,mid+1,r,x,y,z);
}
int F(int x){
	if(x==f[x])return x;
	return F(f[x]);
}
ll now;
void merge(int u,int v){
	u=F(u),v=F(v);
	if(u==v)return;
	now-=1ll*s1[u]*s2[u];
	now-=1ll*s1[v]*s2[v];
	if(s1[u]+s2[u]<s1[v]+s2[v])swap(u,v);
	s1[u]+=s1[v],s2[u]+=s2[v],f[v]=u;
	now+=1ll*s1[u]*s2[u];
	top++,U[top]=u,V[top]=v;
}
void sol(int p,int l,int r){ 
	int ntop=top;
	ll tnow=now;
	for(ed t:g[p])merge(t.u,t.v+n);
	if(l==r)printf("%lld ",now);
	else{
		int mid=(l+r)>>1;
		sol(p<<1,l,mid),sol(p<<1|1,mid+1,r);
	}
	now=tnow;
	while(top>ntop){
		f[V[top]]=V[top];
		s1[U[top]]-=s1[V[top]],s2[U[top]]-=s2[V[top]];
		top--;
	}
}
int main(){
	scanf("%d",&q);
	for(int i=1;i<=2*n;i++)f[i]=i,s1[i]=(i<=n),s2[i]=(i>n);
	for(int i=1,x,y;i<=q;i++){
		scanf("%d%d",&x,&y);
		if(kp[x][y])up(1,1,q,kp[x][y],i-1,(ed){x,y}),kp[x][y]=0;
		else kp[x][y]=i;
	}
	for(int i=1;i<=n;i++)for(pair<int,int> id:kp[i]){
		int u=id.first,v=id.second;
		if(v)up(1,1,q,v,q,(ed){i,u});
	}
	sol(1,1,q);
	return 0;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details