Pagini recente » Cod sursa (job #1210695) | Cod sursa (job #1050012) | Cod sursa (job #254260) | Cod sursa (job #1792582) | Cod sursa (job #636575)
Cod sursa(job #636575)
#include<cstdio>
#include<vector>
using namespace std;
long n,d,k,i;
long a[1000001];
long c[1000001];
long ind[1000001];
long f[125000001];
void read () {
long i;
//unsigned long B,b;
//vector <long> v;
scanf("%ld%ld%ld",&d,&n,&k);
for (i=1;i<=n;i++) {
scanf("%ld",&a[i]);
/*if (a[i]-a[(*(v.begin()))]<=d)
ind[i]=*(v.begin());
else
while (!v.empty()) {
v.erase(v.begin(),v.begin()+1);
if (a[i]-a[(*(v.begin()))]<=d) {
ind[i]=*(v.begin());
break;
}
}
v.push_back(i);*/
/* B=a[i]>>3;
b=a[i]&7;
f[B]=f[B]|(1u<<3);
ind[i]=d-a[i]-1;
B=*/
}
}
/*long cautbin (long st , long dr) {
long m,min2_rasengan=2000000000,i;
i=dr;
while (st<=dr && st<=i && dr<=i && m!=i) {
m=(st+dr)/2;
if (a[i]-a[m]>d)
st=m+1;
else
if (m<=min2_rasengan && m!=i) {
min2_rasengan=c[m];
dr=m-1;
}
}
return min2_rasengan;
}
*/
void rez() {
long i,rasengan,min=d,rasengan2,min_rasengan2,j;
vector <long> v;
vector <long> :: iterator it;
v.push_back(0);
for (i=1;i<=n;i++) {
rasengan=c[i-1]+1;
while (!v.empty() && a[i]-a[(*(v.begin()))]>d) {
v.erase(v.begin(),v.begin()+1);
}
min_rasengan2=c[(*v.begin())];
if (rasengan<min_rasengan2+k)
c[i]=rasengan;
else
c[i]=min_rasengan2+k;
v.push_back(i);
}
printf("%ld\n",c[n]);
}
int main () {
freopen("zombie.in","r",stdin);
freopen("zombie.out","w",stdout);
read();
rez();
return 0;
}