建议降橙
查看原帖
建议降橙
783336
Earth_Sky楼主2024/9/28 10:46

差分稍微优化一下就可以过的,太简单了,此为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;
}
2024/9/28 10:46
加载中...