差分稍微优化一下就可以过的,太简单了,此为AC代码:
#include<bits/stdc++.h>
using namespace std;
const int MAX=3e5+5;
int n,m,l[MAX],r[MAX];
int cnt,ans,a[MAX],b[MAX];
int main(){
ios::sync_with_stdio(NULL);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>l[i]>>r[i];
a[l[i]]++;a[r[i]+1]--;
}
for(int i=1;i<=n;i++){
b[i]=b[i-1]+a[i];
if(b[i]==0) cnt++;
}
for(int i=1;i<=m;i++){
a[l[i]]--;a[r[i]+1]++;ans=0;
for(int j=l[i];j<=r[i];j++){
if(b[j-1]+a[j]==0) ans++;
b[j]=b[j-1]+a[j];
}
cout<<ans+cnt<<endl;
a[l[i]]++;a[r[i]+1]--;
for(int j=l[i];j<=r[i];j++) b[j]=b[j-1]+a[j];
}
return 0;
}