代码+解析
#include<bits/stdc++.h>
using namespace std;
int n,m,fa[200005],x,y;
void init(int n){
for(int i=1;i<=n+1;i++) fa[i]=i;
}
int find(int x){
return x==fa[x] ? x : fa[x]=find(fa[x]);
}
void unionn(int x,int y){
fa[find(y)]=find(x);
}
int main(){
cin>>n>>m;
int ans=n;
init(n);
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
int t=find(x);
while(t<=y){
unionn(t+1,t);//创建相邻元素的父子关系
t=find(t);
ans--;
}
printf("%d\n",ans);
}
return 0;
}