AcWing 422. 校门外的树
原题链接
简单
作者:
尼古拉斯小布丁
,
2021-02-14 11:32:40
,
所有人可见
,
阅读 278
解法一:暴力枚举
#include <iostream>
using namespace std;
const int N = 10010;
bool tree[N];
int main(){
int L,M;
cin>>L>>M;
for(int i=0;i<M;i++){
int l,r;
cin>>l>>r;
for(int i=l;i<=r;i++) tree[i] = true;
}
int res = 0;
for(int i=0;i<=L;i++)
if(tree[i] == false)
res++;
cout<<res<<endl;
return 0;
}
算法2:区间合并
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
#define x first
#define y second
typedef pair<int,int> PII;
PII q[N];
int L,M;
int main(){
cin>>L>>M;
for(int i=0;i<M;i++) cin>>q[i].x>>q[i].y;
//按左端点大小排序
sort(q, q+M);
int sum = 0;
int st=0,ed = -1;
for(int i=0;i<M;i++){
if(ed<q[i].x){
sum += ed-st+1;
st = q[i].x, ed = q[i].y;
}
else
ed = max(ed,q[i].y);
}
sum += ed-st+1;
cout<<L+1-sum<<endl;
return 0;
}