Pagini recente » Istoria paginii runda/road_to_ioi_6/clasament | Cod sursa (job #1657658) | Cod sursa (job #1335646) | Cod sursa (job #1196129) | Cod sursa (job #711535)
Cod sursa(job #711535)
#include <fstream>
using namespace std;
#define Nmax 1000011
#define minim(a , b) ((a < b) ? a : b)
#define oo 2000000011
int bst[Nmax],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-1)
return bin(st,mid);
else
if (A[mid]-A[st]>D-1)
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[kill[i]+1]+K);
printf("%d\n",bst[1]);
return 0;
}