ST表+贪心
struct STList{
vector<vector<int>> stmin;
void init(vector<int> &a)
{
int len=a.size();
int k=__lg(len)+1;
stmin.assign(len,vector<int>(k));
for(int i=0;i<len;i++)
stmin[i][0]=a[i];
for(int j=1;j<k;j++)
{
for(int i=0;i+(1<<j)-1<len;i++)
stmin[i][j]=min(stmin[i][j-1],stmin[i+(1<<(j-1))][j-1]);
}
}
int Min(int l,int r)
{
int k=__lg(r-l+1);
return min(stmin[l][k],stmin[r-(1<<k)+1][k]);
}
};
void solve()
{
int n,m,sum=0;cin>>n>>m;
vector<int> a(n);
for(auto &t:a) cin>>t,sum+=t;
STList st;st.init(a);
priority_queue<PII> q;
function<void(int,int,int)> deal = [&](int l,int r,int v){
int val = st.Min(l,r);
if(val-v) q.push({r-l+1,val-v});
int last=-1;
for(int i=l;i<=r;i++)
{
if(a[i]==val)
{
if(last!=-1) deal(last,i-1,val);
last=-1;
}
else if(last==-1) last=i;
}
if(last!=-1) deal(last,r,val);
};
deal(0,n-1,0);
while(m--)
{
int k;cin>>k;
while(q.size())
{
auto [len,w]=q.top();q.pop();
if(k>=w)
{
sum-=w*len;
k-=w;
w=0;
}
else
{
sum-=k*len;
w-=k;
k=0;
}
if(w) q.push({len,w});
if(k==0) break;
}
cout<<sum<<endl;
}
}