제출 #488974

#제출 시각아이디문제언어결과실행 시간메모리
488974fun_day쌀 창고 (IOI11_ricehub)C++14
17 / 100
99 ms1484 KiB
#include <bits/stdc++.h>

using namespace std;

int besthub(int R, int L, int X[] , long long B){
  vector<long long> pref(R);
  for(int i = 0 ; i < R ; i++){
    if(i == 0) pref[i] = (long long) X[i];
    else pref[i] = pref[i - 1] + (long long) X[i];
  }
  int best = 0;
  for(int i = 1 ; i < R ; i++){
    int l = 0 , r = i;
    int ans = 0;
    while(l <= r){
      int mid = l + (r - l) / 2;
      int used = i - mid;
      long long sum = (long long) X[i] * used  - (pref[i - 1] - (mid > 0 ? pref[mid - 1] : 0));
      long long keep = B - sum;
      int left = i , right = R - 1;
      int here = 0;
      while(left <= right){
        int middle = left + (right - left) / 2;
        int cur = middle - i;
        long long s = pref[middle] - pref[i] - (long long) X[i] * cur;
        if(s + sum <= B){
          here = max(here , cur);
          left = middle + 1;
        }
        else{
          right = middle - 1;
        }
      }
      if(keep >= 0){
        ans = max(ans , here + used);        
        r = mid - 1;
      }
      else{
        l = mid + 1;        
      }
    }
    best = max(best , ans);
    if(best == R - 1) break;
  }
  return best + 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...