记录编号 |
278729 |
评测结果 |
AAAAAAAAAA |
题目名称 |
砍树 |
最终得分 |
100 |
用户昵称 |
Dream |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.636 s |
提交时间 |
2016-07-08 15:07:28 |
内存使用 |
7.94 MiB |
显示代码纯文本
#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("eko.in","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 Debug(){
ll i=n;
ll sum=0;
while(A[i]>114)
sum=A[i--]+sum;
i++;
printf("%ld\n",sum);
printf("%ld\n",i);
}
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;//high is too low
if(tmp==m) return 0;
if(tmp<m) return 1;//high is too high
}
int main(){
read();
Init();
//Debug();
ll l=0,r=maxx+1;
ll mid;
while(l<=r){
mid=(l+r)>>1;
int ok=judge(mid);
if(ok==-1||ok==0) l=mid+1;
if(ok==1) r=mid-1;
//if(ok==0){printf("%ld",mid) ; break;}
}
printf("%ld",r);
return 0;
}