Advertisement
erek1e

IOI '11 P3 - Rice Hub (Standard I/O)

Jul 6th, 2023
871
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  8.     int R, L; long long B;
  9.     cin >> R >> L >> B;
  10.     vector<int> x(R); vector<long long> xPrefixSum(1+R);
  11.     for (int i = 0; i < R; ++i) cin >> x[i], xPrefixSum[i+1] = xPrefixSum[i] + x[i];
  12.     auto xRangeSum = [&](int l, int r) { // [l, r]
  13.         return xPrefixSum[r+1] - xPrefixSum[l];
  14.     };
  15.     // binary search on answer
  16.     int left = 0, right = R+1;
  17.     while (left+1 < right) {
  18.         int mid = (left + right) / 2;
  19.         // check if mid can be achieved
  20.         bool works = false;
  21.         for (int center = (mid-1)/2; center + mid/2 < R && !works; ++center) {
  22.             int l = center - (mid-1)/2, r = center + mid/2;
  23.             long long a = (long long)(center-l)*x[center] - xRangeSum(l, center-1);
  24.             long long b = xRangeSum(center+1, r) - (long long)(r-center)*x[center];
  25.             if (a+b <= B) works = true;
  26.         }
  27.         if (works) left = mid;
  28.         else right = mid;
  29.     }
  30.     cout << left << endl;
  31.     return 0;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement