大佬们,帮帮蒟蒻吧
查看原帖
大佬们,帮帮蒟蒻吧
1419017
z1443888087楼主2024/11/6 21:05
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,a[1000005],cnt,l,r;
bool cmp(int u,int v){
	return u>v;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
	cin>>a[i];
	r=max(r,a[i]);
	}
	sort(a+1,a+1+n,cmp);
//	for(int i=1;i<=n;i++)cout<<a[i]<<"  ";
	l=0;
	while(l<=r){
		int mid=l+(r-l)/2;
		long long s=0;
		for(int i=1;i<=n;i++){
			if(a[i]>mid)s+=a[i]-mid;
			else break;
		}
			if(s>m)l=mid+1;
			else if(s<m)r=mid-1;
			else {
				cout<<mid;
				return 0;
			}
	} 
	cout<<r;
} 

当修改while使用左闭右开时while(l<r){ int mid=l+(r-l)/2; long long s=0; for(int i=1;i<=n;i++){ if(a[i]>mid)s+=a[i]-mid; else break; } if(s>m)l=mid+1; else if(s<m)r=mid; else { cout<<mid; return 0; } } 输出就不对了为什么,是不能使用左闭右开吗

2024/11/6 21:05
加载中...