Cod sursa(job #639747)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 23 noiembrie 2011 21:46:53
Problema Zombie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>

#define maxn 1000005

using namespace std;

ifstream f("zombie.in");
ofstream g("zombie.out");

int d,n,k,i,st,pmin,p,front,back;
int D[maxn],v[maxn],deque[maxn];

inline void insert_deque ( int poz ){
	
	while ( front <= back && D[poz] < D[deque[back]] ){
		--back;
	}
	deque[++back] = poz;
}

inline int front_deque () {
	
	while ( deque[front] < p - 1 && front <= back )	++front;
	if ( front > back )	return -1;
	return deque[front];
}

int main () {
	
	f >> d >> n >> k; st = -k;
	
	front = 1; insert_deque(0);
	for ( i = 1 ; i <= n ; ++i ){
		++st; if ( st > 0 )	insert_deque(st);
		f >> v[i];
		D[i] = D[i-1] + 1;
		while ( v[i] - v[p] >= d ) ++p;
		pmin = front_deque();
		if ( pmin != -1 && D[pmin] + k < D[i] ){
			D[i] = D[pmin] + k;
		}
	}
	
	g << D[n] << "\n";
	
	f.close();
	g.close();
	
	return 0;
}