luogu P1840 Color the Axis_NOI导刊2011提高(05)|并查集

题目描述

在一条数轴上有N个点,分别是1—N。一开始所有的点都被染成黑色。接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色。请输出每个操作执行后剩余黑色点的个数。
输入格式

输入一行为N和M。下面M行每行两个数Li、Ri。

输出格式

输出M行,为每次操作后剩余黑色点的个数。


并查集,合并所有白点

#include<map>
#include<ctime>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=2e5+10;
int fa[N],n,m,cnt;
inline int get(int x){
	if(x==fa[x])return x;
	else return fa[x]=get(fa[x]);
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)fa[i]=i;
	while(m--){
		int a,b; scanf("%d%d",&a,&b);
		b=get(b);
		while(a<=b){
			if(a!=b&&get(a)==b)break;
			fa[b]=get(fa[b-1]);
			cnt++; b=get(b);
		}
		printf("%d\n",n-cnt);
	}
}
posted @ 2019-12-12 11:22  白木偶君  阅读(116)  评论(0编辑  收藏  举报