比赛 |
20160707 |
评测结果 |
C |
题目名称 |
砍树 |
最终得分 |
0 |
用户昵称 |
Lovelove_boii |
运行时间 |
0.000 s |
代码语言 |
C |
内存使用 |
0.00 MiB |
提交时间 |
2016-07-07 16:29:20 |
显示代码纯文本
#include<fstream>
#include<algorithm>
using namespace std;
ifstream cin("eko.in");
ofstream cout("eko.out");
int n,m,ans;
int tree[1000001];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>tree[i];
}
sort(tree+1,tree+1+n);
int left=tree[1],right=tree[n],mid;
while(left+1<right)
{
mid=(left+right)/2;
int sum=0;
for(int i=n;i>=1;i--)
{
if(tree[i]<=mid)
{
break;
}
sum+=tree[i]-mid;
}
if(sum<=m)
{
right=mid;
}
if(sum>m)
{
left=mid;
}
}
int sum_1=0,sum_2=0;
for(int i=n;i>=1;i--)
{
if(tree[i]>left)
{
sum_1+=tree[i]-left;
}
if(tree[i]>right)
{
sum_2+=tree[i]-right;
}
}
if(sum_1<sum_2)
{
ans=left;
}
else
{
ans=right;
}
cout<<ans;
cin.close();
cout.close();
return 0;
}