Cod sursa(job #635732)

Utilizator FlorianFlorian Marcu Florian Data 19 noiembrie 2011 14:33:52
Problema Zombie Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.65 kb
using namespace std;
#include<fstream>
#include<deque>
#define ll long long
const int MAX_N = 100007;
int N, K, D;
ll dp[MAX_N];
int T[MAX_N];
deque<int>Q;
int main()
{
	ifstream in("zombie.in"); ofstream out("zombie.out");
	in >> D >> N >> K;
	int i, j;
	for(i = 1; i <= N; ++i) in >> T[i];
	dp[0] = 0;
	for(i = 1; i <= N; ++i)
	{
		while( !Q.empty() && T[i] - T[ Q.front() ] >= D ) Q.pop_front();
		if( Q.empty() ) j =  i - 1;
		else j = Q.front();
		dp[i] = min( 1 + dp[i-1], (j>0)?1LL*(K + dp[j - 1]):1+dp[i-1] );
		while( !Q.empty() && dp[i] <= dp[ Q.back() ] ) Q.pop_back();
		Q.push_back( i );
	}
	out << dp[N] << "\n";
	return 0;
}