Cod sursa(job #645788)

Utilizator VmanDuta Vlad Vman Data 10 decembrie 2011 15:21:07
Problema Zombie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>

#define Nmax 1000001

int D, N, K;
int T[Nmax], Q[Nmax], st, dr;
long long A[Nmax];

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