AC 0.50 s
Problem url: spoj.com/problems/EKO
#include <stdio.h>
#define ll long long
ll getM(int *list, int n, int H) {
ll sum = 0;
int i;
for(i = 0; i < n; i++)
if(list[i] > H)
sum += list[i] - H;
return sum;
}
int maks(int a, int b) {
return a > b? a: b;
}
int h(int *list, int n, ll m) {
int low = 0, mid, high = 1000000, an = 0;
ll cek;
while(low < high) {
mid = (low + high) / 2;
cek = getM(list, n, mid);
if(cek >= m) {
an = maks(an, mid);
low = mid + 1;
} else high = mid;
}
return an;
}
int main() {
int n;
ll m;
scanf("%d %lld", &n, &m);
int list[n], i;
for(i = 0; i < n; i++) scanf("%d", &list[i]);
printf("%d\n", h(list, n, m));
}
No comments:
Post a Comment