Cod sursa(job #635657)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 19 noiembrie 2011 13:56:04
Problema Zombie Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.67 kb
#include <cstdio>
#define nmax 1000010

long long d[nmax];
int x, n, k, v[nmax];

long long min(long long a, long long b)
{
	if (a>b) a=b;
	return a;
}

int max(int a, int b)
{
	if (a<b) a=b;
	return a;
}

int search(int a, int b, int val)
{
	int m, r=0;
	while (a<=b)
	{
		m=(a+b)/2;
		if (v[m]<val)
		{
			r=m;
			a=m+1;
		} else b=m-1;
	}
	return r;
}

int main()
{
	freopen("zombie.in","r",stdin);
	freopen("zombie.out","w",stdout);
	scanf("%d %d %d",&x, &n, &k);
	int i, p;
	for (i=1; i<=n; i++) scanf("%d", &v[i]);
	for (i=1; i<=n; i++)
	{
		p=search(1, i, max(0, v[i]-x));
		d[i]=min(d[p]+k, d[i-1]+1);
	}
	printf("%lld\n",d[n]);
}