This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#include "ricehub.h"
int besthub(int R, int L, int X[], long long B){
  long long ans = 1;
  long long currsum = 0;
  long long left = 0,right = -1;
  for(long long i=0;i<R;i++){
    currsum += (X[i]-X[i-1])*(i-left);
    currsum -= (X[i]-X[i-1])*(right-i+1);
    right = max(right,i);
    while(currsum>B){
      if(abs(X[i]-X[left])>abs(X[i]-X[right])){
        currsum -= abs(X[i]-X[left]);
        left++;
      }
      else{
        currsum -= abs(X[i]-X[right]);
        right--;
      }
    }
    while(right!=R-1){
      if(abs(X[i]-X[left])>abs(X[i]-X[right+1])){
        currsum -= abs(X[i]-X[left]);
        currsum += abs(X[i]-X[right+1]);
        left++;
        right++;
      }
      else{
        break;
      }
    }
    while(currsum<=B){
        long long l,r;
        if(left==0){
            l = INT_MAX;
        }
        else{
            l = abs(X[i]-X[left-1]);
        }
        if(right==R-1){
            r = INT_MAX;
        }
        else{
            r = abs(X[i]-X[right+1]);
        }
        long long mini = min(l,r);
        if(currsum+mini>B||(l==INT_MAX&&r==INT_MAX)){
            break;
        }
        if(l<r){
            left--;
        }
        else{
            right++;
        }
        currsum += mini;
    }
    ans = max(ans,right-left+1);
  }
  return ans;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |