经典案例

类型题

给定1到n,和m个子区间,求m个子区间外1到n有多少个数

#include<bits/stdc++.h> 
using namespace std;
struct in{
	int l,r;
}s[100100];
int cmp(struct in a,struct in b){
	return a.l==b.l?a.r<b.r:a.l<b.l;	
}//将所有区间以左边界l为第一基准,右边界为第二基准升序排序 
int main(){
	long long n,m,ans=0;
	scanf("%lld%lld",&n,&m);
	for(int i=0;i<n;i++){
		scanf("%d%d",&s[i].l,&s[i].r);
	}
	sort(s,s+n,cmp);
	int x=s[0].r;
	for(int i=0;i<n;i++){
		if(x<s[i].l){//当前最大的右边界小于下一个区间的左边界
			ans+=s[i].l-x-1;//所以中间有空区间,答案加上空区间长度
		}
		x=max(x,s[i].r); 
	}
	ans+=s[0].l+m-x-1;
	printf("%lld",ans);
	return 0;
}
上一篇:广义肥波 欧拉降幂


下一篇:【二分】数列分段(ybtoj 二分-1-1)