求调,悬关(●'◡'●) 带注释
查看原帖
求调,悬关(●'◡'●) 带注释
719843
lizhuorong楼主2024/7/20 10:38

主要是不太理解自己错哪了/_ \

#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;
} 

谢谢

2024/7/20 10:38
加载中...