Pagini recente » Cod sursa (job #3156273) | Cod sursa (job #213261) | Cod sursa (job #535882) | Cod sursa (job #2871064) | Cod sursa (job #711555)
Cod sursa(job #711555)
#include <fstream>
using namespace std;
#define Nmax 1000011
#define minim(a , b) ((a < b) ? a : b)
#define oo 2000000011
int bst[Nmax];
int kill[Nmax];
int A[Nmax];
int D,N,K;
int bin(int st,int dr)
{
if (st<dr)
{
int mid=(st+dr)/2;
if (A[mid]-A[st]>D)
return bin(st,mid);
else
if (A[mid]-A[st]<D)
return bin(mid+1,dr);
else
return mid;
}
else
return st-1;
}
int main()
{
freopen("zombie.in","r",stdin);
freopen("zombie.out","w",stdout);
scanf("%d%d%d",&D,&N,&K);
for (int i=1;i<=N;++i)
scanf("%d",&A[i]);
A[N+1]=oo;
for (int i=1;i<=N;++i)
kill[i]=bin(i,N+1);
for (int i=N;i>0;--i)
bst[i]=minim(bst[i+1]+1,bst[i+kill[i]]+K);
printf("%d\n",bst[1]);
return 0;
}