fork download
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3.  
  4. bool check(int mid, vector<int>& arr, int n, int op, int m) {
  5. int doneTillNow = 0, totalOps = 0;
  6. vector<int> dArr(n + m + 1, 0); // difference array
  7.  
  8. for(int i = 0; i < n; ++i) {
  9. doneTillNow -= dArr[i];
  10. if(arr[i] + doneTillNow < mid) {
  11. int needed = mid - (arr[i] + doneTillNow);
  12. totalOps += needed;
  13. doneTillNow += needed;
  14. dArr[i+m] = needed;
  15. }
  16. }
  17.  
  18. return totalOps <= op;
  19. }
  20.  
  21. int solve(vector<int>& arr, int n, int subarray_len, int num_operations) {
  22. auto it = minmax_element(arr.begin(), arr.end());
  23. int low = *it.first;
  24. int high = *it.second + num_operations;
  25.  
  26. while(low < high) {
  27. int mid = (high + low)/2;
  28. if(check(mid, arr, n, num_operations, subarray_len)) low = mid;
  29. else high = mid-1;
  30. }
  31.  
  32. return low;
  33. }
  34.  
  35. int main() {
  36. int n, subarray_len, num_operations;
  37. cin >> n >> subarray_len >> num_operations;
  38. vector<int> arr(n);
  39. for(int& i: arr) cin >> i;
  40.  
  41. cout << solve(arr, n, subarray_len, num_operations);
  42. }
Success #stdin #stdout 0s 5444KB
stdin
5 3 2
6 7 7 6 7
stdout
7