记录编号 |
278410 |
评测结果 |
AAAAAAAAAA |
题目名称 |
砍树 |
最终得分 |
100 |
用户昵称 |
Mealy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.531 s |
提交时间 |
2016-07-07 21:03:09 |
内存使用 |
7.94 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int nmax=1000086;
typedef unsigned long long LLU;
typedef long long LLD;
int N,M,tmpmax=0;
LLU ans=0;
int s[nmax],f[nmax];
int i;
bool Check(int height)
{
int i;
LLU ans = 0;;
for(i=1;i<=N;i++)
{
if(s[i]>height)
{
ans+=s[i]-height;
}
}
return ans>=M;
}
int BinarySearch(int left,int right)
{
while(left+1<right)
{
int middle=(left+right)>>1;
if(Check(middle))
left=middle;
else
right=middle;
}
if(Check(left))
return left;
else
return right;
return 0;
}
int main()
{
freopen("eko.in","r",stdin);
freopen("eko.out","w",stdout);
scanf("%d%d",&N,&M);
for(i=1;i<=N;i++)
scanf("%d",&s[i]);
for(i=1;i<=N;i++)
if(s[i]>tmpmax)
tmpmax=s[i];
ans=BinarySearch(1,tmpmax);
printf("%llu",ans);
return 0;
}