差分原理:
b[i] = a[i] - a[i-1]
b[m] +=1
b[n] -=1
a[i] = b[i] + a[i-1]
此时a[m]~a[n]之间的所有元素都加1了。
#include <bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
int cf[100005],cf2[100005]; //差分数组cf,原数组cf2
int main(){
int l,m,cnt=0;
cin>>l>>m;
for(int i=1;i<=m;i++){
cin>>a[i];
cin>>b[i];
}
for(int i=1;i<=m;i++){
cf[a[i]]+=1,cf[b[i]+1]-=1; //差分数组
}
for(int i=1;i<=(l+1);i++){ //特别注意题目中的范围是0~L
cf2[i]=cf2[i-1]+cf[i]; //还原原数组cf2
if(cf2[i]==0){
cnt++;
}
}
cout<<cnt;
return 0;
}