제출 #285735

#제출 시각아이디문제언어결과실행 시간메모리
285735peijar쌀 창고 (IOI11_ricehub)C++17
100 / 100
22 ms2304 KiB
#include <bits/stdc++.h>
using namespace std;

#define SZ(v) ((int)(v).size())
using ll = long long;

const int MAXN = 1e5+1;

ll prefixSum[MAXN];
ll cntFields, maxCor, budget;
ll cor[MAXN];

ll getCost(int l, int r)
{
	int mid = (l+r)/2;
	ll cost = (2*mid-l-r) * cor[mid] + prefixSum[r+1] + prefixSum[l] - prefixSum[mid] - prefixSum[mid+1];
	return cost;
}

bool can(int want)
{
	for (int i(0); i + want <= cntFields; ++i)
		if (getCost(i, i+want-1) <= budget)
			return true;
	return false;
}

int besthub(int c, int m, int co[], ll b)
{
	budget = b;
	cntFields = c;
	maxCor = m;
	for (int i(0); i < cntFields; ++i)
		cor[i] = co[i];
	for (int i(0); i < cntFields; ++i)
		prefixSum[i+1] = prefixSum[i] + cor[i];

	int r(0);
	int ret(0);
	for (int l(0); l < cntFields; ++l)
	{
		r = max(r, l);
		while (r < cntFields and getCost(l, r) <= budget)
			++r;
		ret = max(ret, r-l);
	}
	return ret;

	int lo(0), up(cntFields);
	while (lo < up)
	{
		int mid = (lo+up+1)/2;
		if (can(mid)) lo = mid;
		else up = mid-1;
	}
	return lo;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...