rt.
另附代码求调
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define pii pair<int,int>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define fi first
#define se second
using namespace std;
inline ll read(){
ll k=0,flag=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')flag=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
k=(k<<1)+(k<<3)+(c^48);
c=getchar();
}
return k*flag;
}
inline void print(ll x){
if(x<0){
putchar('-');
x=-x;
}
ll y=10,len=1;
while(y<=x){
y=(y<<1)+(y<<3);
len++;
}
while(len--){
y/=10;
putchar(x/y+48);
x%=y;
}
}
inline char readc(){
char c=getchar();
while(c==' '||c=='\n')c=getchar();
return c;
}
const int N=2e5+10;
ll n,d,a[N],b[N],now,ans;
int main(){
cin>>n>>d;
for(int i=1;i<n;++i)a[i]=read();
for(int i=1;i<=n;++i)b[i]=read();
for(int i=1;i<n;++i){
int pos=n;
ll dis=a[i];
for(int j=i+1;j<=n;++j){
if(b[j]<b[i]){
pos=j;
break;
}
dis+=a[j-1];
}
ll num;
dis-=now;
if(dis%d==0)num=dis/d;
else num=dis/d+1;
now=num*d-dis;
ans+=num*b[i];
i=pos-1;
//cout<<ans<<" "<<pos<<" "<<num<<" "<<now<<"\n";
}
cout<<ans;
return 0;
}