Cod sursa(job #711535)

Utilizator danalex97Dan H Alexandru danalex97 Data 12 martie 2012 12:25:39
Problema Zombie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
using namespace std;

#define Nmax 1000011
#define minim(a , b) ((a < b) ? a : b)
#define oo 2000000011

int bst[Nmax],kill[Nmax];
int A[Nmax];
int D,N,K;

int bin(int st,int dr)
{
	if (st<dr)
	{
		int mid=(st+dr)/2;
		if (A[mid]-A[st]<D-1)
			return bin(st,mid);
		else
			if (A[mid]-A[st]>D-1)
				return bin(mid+1,dr);
			else
				return mid;
	}
	else
		return st-1;
}

int main()
{
	freopen("zombie.in","r",stdin);
	freopen("zombie.out","w",stdout);
	
	scanf("%d%d%d",&D,&N,&K);
	for (int i=1;i<=N;++i)
		scanf("%d",&A[i]);
	A[N+1]=oo;
	for (int i=1;i<=N;++i)
		kill[i]=bin(i,N+1);
	
	for (int i=N;i>0;--i)
		bst[i]=minim(bst[i+1]+1,bst[kill[i]+1]+K);
	
	printf("%d\n",bst[1]);
	
	return 0;
}