5pts:
#include<bits/stdc++.h>
const int N=1e5+5;
long long n,d,v[N],a[N],sum,ans,dy,j;
int main(){
scanf("%lld%lld",&n,&d);
for(int i=1;i<n;i++)scanf("%lld",&v[i]);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<n;i++){
sum=0,j=i;
for(;a[j]<=a[i+1];i++)sum+=v[i+1];
sum=std::max(0ll,sum-dy),dy=std::max(dy-sum,0ll),ans+=(long long)ceil(sum*1.000/d)*a[j],dy+=(long long)ceil(sum*1.000/d)*d-sum;
}
return !printf("%lld",ans);
}
95pts:
#include<bits/stdc++.h>
const int N=1e5+5;
long long n,d,v[N],a[N],sum,ans,dy,j;
int main(){
scanf("%lld%lld",&n,&d);
for(int i=1;i<n;i++)scanf("%lld",&v[i]);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<n;i++){
sum=std::max(0ll,v[i]-dy),dy=std::max(dy-v[i],0ll),j=i;
for(;a[j]<=a[i+1];i++)sum+=v[i+1],dy=std::max(dy-v[i+1],0ll);
ans+=(long long)ceil(sum*1.000/d)*a[j],dy+=(long long)ceil(sum*1.000/d)*d-sum;
}
return !printf("%lld",ans);
}