记录编号 278376 评测结果 AAAAAAAAAA
题目名称 砍树 最终得分 100
用户昵称 Gravatarc2018 是否通过 通过
代码语言 C++ 运行时间 1.421 s
提交时间 2016-07-07 18:46:58 内存使用 4.13 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,A[1000020];
int l=0,r=1000000000;
int f=0;
int mid;
void init()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>A[i];
}
int check(int mid)
{
	long long sum=0;
	for(int i=1;i<=n;i++)
	{
		if(A[i]>mid) sum+=A[i]-mid;
		if(sum>m)  return 1;
	}
	if(sum==m)  return 0;
	if(sum<m)  return -1;
}
void print()
{
	if(f) { cout<<mid;return;}
	int b=check(l);
	int c=check(r);
	if(b==0) {cout<<l<<endl;return;}
	if(c==-1)  {cout<<l<<endl;return;}
	if(c==0)  {cout<<r<<endl;return;}
	if(b==1&&c==1){ cout<<r<<endl;return;}
	
}
int main()
{
	freopen("eko.in","r",stdin);
	freopen("eko.out","w",stdout);
	init();
	int a;
	while(r-l>1)
	{
		mid=(r+l)/2;
		a=check(mid);
		if(a==0)
		{
			f=1;
			break;
		}
		if(a==1) l=mid;
		if(a==-1)  r=mid;
  	}
	print();
	return 0;
}