80分求助
查看原帖
80分求助
661595
a2lyaXNhbWUgbWFyaXNh楼主2022/7/26 15:48

rt,老师也没找出问题

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,ans;
int tree[1000010];
int l=0,r,mid;
inline int read() {
	register int x=0;
	int f=1;
	register char ch=getchar();
	while(ch<'0'||ch>'9') {
		if(ch='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') {
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return f*x;
}
inline void write(int x) {
	if(x<0) {
		putchar('-');
		x=-x;
	}
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
inline bool check(int mid){
	int sum=0;
	for(int i=0;i<n;i++)if(tree[i]-mid>=0)sum+=tree[i]-mid;
	return sum>=m?1:0;
}
signed main(){
	n=read();
	m=read();
	for(int i=0;i<n;i++){
	    tree[i]=read();
	    r=r<tree[i]?tree[i]:r;
	}    
	while(l<=r){
		mid=(l+r)/2;
		if(check(mid)){
			ans=mid;
			l=mid+1;
		}else r=mid-1;
	}
	write(ans);
	return 0;
} 
2022/7/26 15:48
加载中...