有点类似于校门外的数,有区间 1∼n,然后输入 m 个区间,将每个区间里的数全变成 1(一开始是 0),操作完后区间中 0 的个数,1≤n≤106。
正解是 O(n log n) 的贪心,但是我的 O(n) (差不多)的代码却全错了(不知道是TLE还是WA),求助。
#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int main(){
int n,m,ans=0;
cin>>n>>m;
for(int i=0;i<m;i++){
int s,e;
cin>>s>>e;
a[s]=max(e,a[i]);
}
for(int i=1;i<=n;){
if(a[i]==0)ans++,i++;
else{
int Max=a[i];
for(i=i+1;i<=Max;i++)Max=max(Max,a[i]);
}
}
cout<<ans;
return 0;
}