社区讨论

求调,悬关(●'◡'●) 带注释

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 条回复,欢迎继续交流。

正在加载回复...