제출 #111653

#제출 시각아이디문제언어결과실행 시간메모리
111653ly20쌀 창고 (IOI11_ricehub)C++14
100 / 100
25 ms4344 KiB
#include<bits/stdc++.h>
#define debug(args...) //fprintf(stderr,args)
using namespace std;
const int MAXN=112345;
const long long MAXL=1123456789;
long long se[MAXN],sd[MAXN],v[MAXN];
int besthub(int r, int l, int x[], long long b)
{
	for(int i=0;i<r;i++)v[i]=x[i];
	se[0]=v[0];
	debug("esquerda:\nse[%d]=%lld\n",0,se[0]);
	for(int i=1;i<r;i++)
	{
		se[i]=se[i-1]+v[i];
		debug("se[%d]=%lld\n",i,se[i]);
	}
	debug("\n");
	sd[r-1]=l-v[r-1];
	for(int i=r-2;i>=0;i--)sd[i]=sd[i+1]+(l-v[i]);
	debug("direita:\n");
	for(int i=0;i<r;i++)
	{
		debug("sd[%d]=%lld\n",i,sd[i]);
	}
	debug("\n");
	int resp=0;
	int ini=0,fim=0;
	while(fim<r)
	{
		int m=(ini+fim)/2;
		long long cont=0;
		if(m==0)
		{
			cont+=v[fim]-v[ini];
		}
		else if(m!=r-1)
		{
			cont+=se[fim]-se[m-1];
			cont-=(fim-m+1)*v[m];
			cont+=sd[ini]-sd[m+1];
			cont-=(m-ini+1)*(l-v[m]);
		}
		debug("ini=%d fim=%d cost=%lld\n",ini,fim,cont);
		if(cont<=b)
		{
			resp=max(resp,fim-ini+1);
			fim++;
		}
		else ini++;
	}
	return resp;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...