Pagini recente » Cod sursa (job #1627573) | Cod sursa (job #2570058) | Cod sursa (job #2631761) | Cod sursa (job #2741259) | Cod sursa (job #614080)
Cod sursa(job #614080)
Utilizator |
Mr. 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;
}