分析:
用并查集保存位置,也可以用线段树
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 500005
int n , m;
int fa[maxn];
int ans ;
void deal(int a,int b)
{
for(int i = a ; i <= b ; i ++){
if( fa[i] ){
i = fa[i];
}
else{
ans--;
fa[i] = b;
}
}
}
int main()
{
cin >> n >> m;
ans = n;
for(int i = 0 ; i < m ; ++i)
{
int a,b;
scanf("%d %d",&a,&b);
if( a > b )swap(a,b);
if( b >= n )b = n;
deal(a,b);
printf("%d\n",ans);
}
}