Pagini recente » Cod sursa (job #2141882) | Cod sursa (job #355970) | Cod sursa (job #2463074) | Cod sursa (job #1986426) | Cod sursa (job #636826)
Cod sursa(job #636826)
#include<stdio.h>
#define maxn 1000005
FILE*f=fopen("zombie.in","r");
FILE*g=fopen("zombie.out","w");
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[front]] ){
--back;
}
deque[++back] = poz;
}
inline int front_deque () {
while ( deque[front] < p - 1 && front <= back ) ++front;
return deque[front];
}
int main () {
fscanf(f,"%d %d %d",&d,&n,&k); st = -k;
front = 1;
for ( i = 1 ; i <= n ; ++i ){
++st; if ( st > 0 ) insert_deque(st);
fscanf(f,"%d",&v[i]);
D[i] = D[i-1] + 1;
while ( v[i] - v[p] > d ) ++p;
pmin = front_deque();
if ( pmin && D[pmin] + k < D[i] ){
D[i] = D[pmin] + k;
}
}
fprintf(g,"%d\n",D[n]);
fclose(f);
fclose(g);
return 0;
}