80,wa点3,7
查看原帖
80,wa点3,7
535658
xubohui112楼主2021/12/31 23:03
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	long long a[50005],b[50005],right=2 ,num=0,ans=0,n,k;//b数组用来存在i-1的左边最多能放多少颗钻石,right为左边界,left为右边界,num用来存每次左边的最大值; 
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++){//用i来模拟left 
		while(a[right]<=a[i]+k&&right!=n) right++;//判断当边界没有到最大时,就把右边界扩大 
		b[right]=max(right-i,b[right]);//右边最大值 
		num=max(num,b[i]);//左边最大值 
		ans=max(ans,num+right-i);//两个答案互相比较 
	} 
	cout<<ans;//输出答案 
}  
2021/12/31 23:03
加载中...