제출 #1193136

#제출 시각아이디문제언어결과실행 시간메모리
1193136Nomio쌀 창고 (IOI11_ricehub)C++20
100 / 100
13 ms2632 KiB
#include<bits/stdc++.h>
using namespace std;
using ll = long long;

int besthub(int R, int L, int X[], ll B) {
	int ans = 0;
	vector<int> x(R + 1);
	for(int i = 0; i < R; i++) {
		x[i + 1] = X[i];
	}
	vector<ll> pre(R + 1, 0), suf(R + 2, 0);
	for(int i = 1; i <= R; i++) {
		pre[i] = pre[i - 1] + x[i];
	}
	for(int i = R; i >= 1; i--) {
		suf[i] = suf[i + 1] + x[i];
	}
	for(int i = 1; i <= R; i++) {
		int l = 0, r = R - i + 1;
		while(l < r) {
			int mid = (l + r + 1) / 2;
			int med = i + mid / 2;
			int cnta = med - i;
			int cntb = mid - cnta - 1;
			int ida = i;
			int idb = i + mid - 1;
			ll P = 1LL * cnta * x[med];
			P -= (pre[med - 1] - pre[ida - 1]);
			ll S = suf[med + 1] - suf[idb + 1];
			S -= 1LL * cntb * x[med];
			if(P + S <= B) l = mid;
			else r = mid - 1;
		}
		ans = max(ans, l);
	}
	return ans;
}
//
//int main() {
//	cout << besthub(5, 20, {1, 2, 10, 12, 14}, 6) << '\n';
//}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...