题目
思考
这题如果用暴枚,时间是
O
O
O(1000000
N
N
N),要做10^8次,就是1亿。
但是……O3开好也能过……
但如果
N
N
N为1000那就完犊子了。
所以,还是用差分保险。
代码
#include<bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize(2)
//#define int long long
using namespace std;
int n,l[105],r[105],f[1005],a[1005],sum,ans;
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n;
for (int i=1;i<=n;i++){
cin>>l[i]>>r[i];
f[l[i]+1]++,f[r[i]+1]--;//差分
}
for (int i=1;i<=n;i++){
sum=0;
f[l[i]+1]--,f[r[i]+1]++;//假设奶牛i被解雇了
for (int j=1;j<=1000;j++){
a[j]=a[j-1]+f[j]; //前缀和
if(a[j]) sum++; //记录有奶牛保护的时间段
}
ans=max(ans,sum); //记录最大值
f[l[i]+1]++,f[r[i]+1]--;//状态还原
}
cout<<ans;
return 0;
}
算法
差分