比赛 20160707 评测结果 WWWWWWWWWW
题目名称 砍树 最终得分 0
用户昵称 Dream 运行时间 0.014 s
代码语言 C++ 内存使用 7.94 MiB
提交时间 2016-07-07 16:19:51
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <cmath>
#include <vector>
#include <cstdlib>
#include <algorithm>
#define MAX(a,b)(a>b?a:b)
using namespace std;
typedef long long ll;
ll n,m;
ll maxx=0;
ll A[1000001]={0};
void read(){
	freopen("test.out","r",stdin);
	freopen("eko.out","w",stdout);
}

inline ll Dread(){
	ll data=0;
	char ch=getchar();
	while(ch>'9'||ch<'0') ch=getchar();
	do{
		data=data*10+ch-'0';
		ch=getchar();
	}while(ch<='9'&&ch>='0');
	return data;
}

void Init(){
	scanf("%ld",&n);
	scanf("%ld",&m);
	//m=Dread();
	for(ll i=1;i<=n;i++){
		scanf("%ld",&A[i]);
		maxx=MAX(maxx,A[i]);
	}
	sort(A+1,A+n+1);
	return;
}

int judge(ll high){
	ll tmp=0;
	for(ll i=n;i>=1;i--){
		if(A[i]>high) tmp+=(A[i]-high);
		else break;
	}
	if(tmp>m) return -1;
	if(tmp==m) return 0;
	if(tmp<m) return 1;
}


ll bin(ll l,ll r){
	if(l>=r) return 0;
	ll mid=(l+r)>>1;
	ll tmp1=0;
	ll tmp2=0;
	int ok=judge(mid);
	if(ok==1) tmp1=bin(l,mid);
	if(ok==-1) tmp2=bin(mid+1,r);
	if(ok==0){
		printf("%ld",mid);
		exit(0);
	};
	return mid;
}


int main(){
	read();
	Init();
	bin(1,maxx);
	return 0;
}