这题如何使用二分法来求啊
我感觉dp里最优值更新的部分不是要一个一个的扫吗
比如第三篇题解,二分只能查找一个点,然后就更新了。但这显然不符合我们DP更新的原则啊,这里我不太理解,有哪位能帮帮我吗
附代码
#include<bits/stdc++.h>
using namespace std;
int n,f[300001]={0},maxx=-1e9,ans=0;
struct cow{
int x,y,z,v;
}a[200001];
bool cmp(cow a,cow b){
return a.y<b.y;
}
int main(){
//freopen("FoxAndGame.in","r",stdin);
//freopen("FoxAndGame.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){cin>>a[i].x>>a[i].y;a[i].v=a[i].y-a[i].x+1;maxx=max(maxx,a[i].y);}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)cout<<a[i].x<<" "<<a[i].y<<endl;
for(int i=1;i<=n;i++){
for(int j=i-1;j>=0;j--){
if(a[i].x>a[j].y)f[i]=max(f[i],a[i].v+f[j]);
}
}
for(int i=1;i<=n;i++)ans=max(ans,f[i]);
cout<<ans<<endl;
return 0;
}