题解 | #剩下的树#
剩下的树
https://www.nowcoder.com/practice/f5787c69f5cf41499ba4706bc93700a2
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int cmp(vector<int>&a,vector<int>&b){//小的要在前面
return a[0]<b[0]?1:0;
}
int main() {
int L, M;
cin>>L>>M;
vector<vector<int>>qj(M,vector<int>(2,0));
for(int i=0;i<M;i++){
cin>>qj[i][0]>>qj[i][1];
}
sort(qj.begin(),qj.end(),cmp);
int cnt=0;
int left=qj[0][0],right=qj[0][1];
for(int i=1;i<M;i++){
if(qj[i][0]>=right){
cnt+=(right-left+1);
left=qj[i][0];
right=qj[i][1];
}else{//区间小于它
right=max(right,qj[i][1]);
}
if(i==M-1){
cnt+=(right-left+1);
}
}
cout<<L-cnt+1;
}
先排序,然后用left和right存储左右区间,最后别忘记+1