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>
#include "ricehub.h"
using namespace std;
long long pos[100100], qs[100100];
long long cost_r(int i, int j)
{
	if(i > j) return 0;
	return qs[j] - qs[i] - pos[i]*(j-i);
}
long long cost_l(int i, int j)
{
	return pos[j]*(j-i) - qs[j-1] + qs[i-1];
}
int solve_l(int i, long long bl)
{
	int l = 1, r = i;
	while(l != r)
	{
		int mid = (l+r)>>1;
		if(cost_l(mid, i) <= bl) r = mid;
		else l = mid+1;
	}
	return i-l;
}
int besthub(int R, int L, int X[], long long B)
{
	int ans = 1;
	for(int i=0 ; i<R ; i++)
	{
		pos[i+1] = X[i];
		qs[i+1] = qs[i] + X[i];
	}
	for(int i=1 ; i<=R ; i++)
	{
		int l=i, r = R;
		while(l != r)
		{
			int mid = (l+r+1)>>1;
			long long br = cost_r(i, mid);
			if(br > B)
			{
				r = mid-1;
				continue ;
			}
			long long bl = B - br;
			int hl = solve_l(i, bl);
			if(mid - i + hl >= mid - 1 - i + solve_l(i, B - cost_r(i, mid-1))) l = mid;
			else r = mid-1;
		}
		ans = max(ans, 1+l-i + solve_l(i, B - cost_r(i, l)));
	}
	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... |