社区讨论
求调,悬关(●'◡'●) 带注释
P1868饥饿的奶牛参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lytivsh4
- 此快照首次捕获于
- 2024/07/20 10:41 2 年前
- 此快照最后确认于
- 2024/07/20 11:22 2 年前
主要是不太理解自己错哪了/_ \
CPP#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;//区间左右两端
int num;//区间长度
}s[150005];
int a[150005],f[150005];
bool cmp(const node &q,const node &p){//用左端点排序
if(q.x !=p.x ) return q.x<p.x ;
return q.y <p.y ;
}
int main(){
int n,ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){//输入
scanf("%d%d",&s[i].x ,&s[i].y );
s[i].num=s[i].y -s[i].x +1;
}
sort(s+1,s+n+1,cmp);
for(int i=1;i<=n;i++){
if(i!=1){
int g=lower_bound(a+1,a+i,s[i].x ,greater<int>() )-a;//二分不相交的区间
for(int j=1;j<=g;j++){
f[i]=max(f[j],f[i]);
}//f[i]找最大值
}
f[i]+=s[i].num;//加上自己
a[i]=s[i].y ;//保存右端点
ans=max(f[i],ans);//取最大值
}
cout<<ans;
}
谢谢
回复
共 2 条回复,欢迎继续交流。
正在加载回复...