제출 #104099

#제출 시각아이디문제언어결과실행 시간메모리
104099wilwxk쌀 창고 (IOI11_ricehub)C++11
100 / 100
26 ms2964 KiB
#include "ricehub.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int MAXN=1e5+3;
int v[MAXN];
ll ps[MAXN];
int n, m;
int ini, fim;
ll x;

ll soma(int ini, int fim) { if(fim<ini) return 0; return ps[fim]- (ini==0 ? 0 : ps[ini-1]); }

bool testa(int k) {
	for(int fim=k-1; fim<n; fim++) {
		int ini=fim-k+1;
		int mid=(ini+fim)/2;
		ll aa=v[mid]; aa*=(mid-ini+1); aa-=soma(ini, mid);
		ll bb=soma(mid+1, fim); if(mid<fim) bb-=v[mid]*(ll)(fim-mid);
		// printf("test %d %d [%d] > m %d > %lld %lld > %lld\n", ini, fim, k, mid, aa, bb, aa+bb);
		if(aa+bb<=x) return 1;
	}
	return 0;
}

int besthub(int N, int M, int V[], ll X)
{

	n=N; m=M; x=X;
	for(int i=0; i<n; i++) v[i]=V[i];
	ps[0]=v[0]; for(int i=1; i<n; i++) ps[i]=ps[i-1]+v[i];

	int tam=0;
	for(int i=n; i>0; i/=2) while(tam+i<=n&&testa(tam+i)) tam+=i;

	return tam;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...