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

题目描述

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

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

输出格式

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


并查集,合并所有白点

#include
#include
#include
#include
#include
#include
#include
#include
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);
    }
}

你可能感兴趣的:(luogu P1840 Color the Axis_NOI导刊2011提高(05)|并查集)