1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <stdio.h> long long arr[1000001] = { 0 }; int main() { int n, m; scanf("%d %d", &n, &m); getchar(); long long max = 0; for (int i = 1; i <= n; i++) { scanf("%lld", &arr[i]); } long long low = 0, high = 1000000000; while (low + 1 < high) { long long mid = (low + high) / 2; long long sum = 0; // printf("%lld %lld\n", low, high); for (int i = 1; i <= n; i++) { if(arr[i]>mid) sum += (arr[i] - mid); } if (sum > m) { low = mid; } else if (sum < m) { high = mid; } else { printf("%lld", mid); return 0; } } printf("%lld", low); } | cs |
'알고리즘 > Divide and Conquer-이분탐색' 카테고리의 다른 글
이진검색 더블릿 (PS) (0) | 2019.02.13 |
---|---|
공격적인 소 더블릿 (Aggressive Cow) (0) | 2019.02.12 |
6236 용돈관리 (PS) (0) | 2019.02.12 |
2343 기타레슨 (PS) (0) | 2019.02.12 |
2512 예산 (PS) (0) | 2019.02.11 |