Cod sursa(job #637014)

Utilizator SmarandaMaria Pandele Smaranda Data 20 noiembrie 2011 09:57:24
Problema Zombie Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.83 kb
#include<cstdio>
#include<vector>
using namespace std;
long n,d,k,i;
long a[1000001];
long c[1000001];

void read () {
	long i;
	scanf("%ld%ld%ld",&d,&n,&k);
	for (i=1;i<=n;i++) {
		scanf("%ld",&a[i]);
	}
}

void rez() {
	long i,rasengan,rasengan2,min_rasengan2,j,st,dr,val,m;
	for (i=1;i<=n;i++) {
		rasengan=c[i-1]+1;
		st=0;
		dr=i;
		val=a[i]-d;
		j=-1;
		if (val>=0) {
			while (st<=dr) {
				m=(st+dr)>>1;
				if (a[m]==val) {
					j=m;
					break;
				}
				if (a[m]<val)
					st=m+1;
				else
					dr=m-1;
			}
		}
		if (j==-1)
			j=st;
		min_rasengan2=c[j]+k;
		if (rasengan<min_rasengan2)
			c[i]=rasengan;
		else
			c[i]=min_rasengan2;
	}
	printf("%ld\n",c[n]);
}

int main () {

	freopen("zombie.in","r",stdin);
	freopen("zombie.out","w",stdout);
	
	read();
	rez();
	return 0;
}