记录编号 |
352192 |
评测结果 |
AAAAAAAAAA |
题目名称 |
砍树 |
最终得分 |
100 |
用户昵称 |
jjky |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.287 s |
提交时间 |
2016-11-16 22:01:10 |
内存使用 |
2.06 MiB |
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=1000005;
int n,a[maxn];
long long m,sum;
int read(){
int x=0;
char ch;
ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x;
}
bool check(int h){
int i;
sum=0;
for(i=1;i<=n;i++)
if(a[i]>h)
sum+=a[i]-h;
if(sum>=m) return true;
else return false;
}
int work(){
freopen("eko.in","r",stdin);
freopen("eko.out","w",stdout);
int i,j,l=0,r=0,mid,ans;
n=read();m=read();
for(i=1;i<=n;i++){
a[i]=read();
r=max(r,a[i]);
}
while(l<=r){
mid=(l+r)>>1;
if(check(mid)) ans=mid,l=mid+1;
else r=mid-1;
}
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
int L=work();
int main(){
;
}
/*
5 20
4 42 40 26 46
36
*/