二分T了,貌似是死循环,求助
查看原帖
二分T了,貌似是死循环,求助
336705
科学的正方形楼主2021/11/5 18:31
#include<bits/stdc++.h>
#include<stdlib.h>
using namespace std;
#define ll long long
ll n,k,l,a[100009],q[240000],shang=0,ans=0,cnt=0,x,y;
bool cmp(ll aa,ll bb)
{
	return aa>bb;
}
void dfs(ll h)
{
	ll an=0;
	for(int i=1;i<=h;i++)
		if(a[i]<h)if(h-a[i]<=k)an+=(h-a[i]);else return;
	if(an<=l)ans=max(ans,h),x=ans;
	else y=h-1;
	return;
}
void fen()
{
	while(x!=y)dfs((x+y)/2+1),dfs((x+y)/2);
}
int main()
{
	cin>>n>>k>>l;
	x=0,y=n;
	l*=k;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+1,a+n+1,cmp);
	fen();
	cout<<ans<<endl;
}
2021/11/5 18:31
加载中...