Submission #563335

#TimeUsernameProblemLanguageResultExecution timeMemory
5633351neRice Hub (IOI11_ricehub)C++14
26 / 100
1085 ms3744 KiB
#include "ricehub.h"
#include<bits/stdc++.h>
using namespace std;
int besthub(int R, int L, int X[], long long B)
{
  int ans = 0;
  vector<int64_t>pref(R + 1,0),dpref(R + 1,0);
  vector<int64_t>suff(R + 1,0),dsuff(R + 1,0);
  for (int i = 0 ;i<R - 1;++i){
	  pref[i + 1] = pref[i] + (X[i + 1] - X[i]);
	  dpref[i + 2] = pref[i + 1] + dpref[i + 1];
  }
   for (int i = R - 2 ;i>=0;--i){
	  suff[i] = suff[i + 1] + (X[i + 1] - X[i]);
	  dsuff[i] = suff[i] + dsuff[i + 1];
  }
 auto dist = [&](int l,int r){
	 return pref[r] * (r - l) - dpref[r] + dpref[l];
  };
  auto dist2 = [&](int l,int r){
	 return suff[l] * (r - l) + dsuff[r + 1] - dsuff[l + 1];
  };
  auto distt = [&](int l,int r){
		int mid = (l + r)>>1;
		//cout<<dist(l,mid)<< " "<<dist(mid,r)<<" ";
		return dist(l,mid) + dist2(mid,r);
	};
  for (int i = 0;i<R;++i){
	  int j = i + 1;
		while(j<R){
			if (distt(i,j)<=B){
				ans = max(ans,j - i + 1);
				++j;
			}
			else{
				break;
			}
		}
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...