Cod sursa(job #614080)

Utilizator cezar305Mr. Noname cezar305 Data 5 octombrie 2011 16:54:06
Problema Zombie Scor Ascuns
Compilator cpp Status done
Runda Marime 0.67 kb
#include <stdio.h>

#define MAXN 1000010

int A[MAXN], Din[MAXN], Deque[MAXN];
int N,K,D;
int i,st,dr;

inline int min(const int &a, const int &b){return (a<b ? a : b);} 

int main()
{
	freopen("zombie.in","r",stdin);
	freopen("zombie.out","w",stdout);
	
	scanf("%d %d %d\n",&D,&N,&K);
	
	for (i=1; i<=N; ++i)
		scanf("%d",A+i);
	
	Din[1] = 1; Deque[1] = 1;
	st = dr = 1;
	for (i=2; i<=N; ++i){
		while (st<=dr && A[i] - A[Deque[st]] >= D)
			++st;
		Din[i] = Din[i-1] + 1;
		if (st <= dr)
			Din[i] = min(Din[i], Din[Deque[st]-1] + K);
		
		while (st<=dr && Din[Deque[dr]] >= Din[i])
			--dr;
		Deque[++dr] = i;
	}
	
	printf("%d\n",Din[N]);
	return 0;
}