题目链接:
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
typedef long long ll;
struct food
{
int loc;
ll cost;
};
food a[maxn];
int pos=1;
ll num[maxn];
int n,m;
ll cost[maxn];
int compare (food a,food b)
{
if(a.cost!=b.cost) return a.cost<b.cost;
return a.loc<b.loc;
}
int main()
{
ll rest=0;
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
{
scanf("%lld",&num[i]);
rest+=num[i];
}
for (int i=1;i<=n;i++)
{
a[i].loc=i;
scanf("%lld",&a[i].cost);
cost[i]=a[i].cost;
}
sort(a+1,a+n+1,compare);
while (m--)
{
ll ans=0;
ll t,d;
scanf("%lld%lld",&t,&d);
if(rest<d)
{
rest=0;
printf("0\n");
continue;
}
rest-=d;
if(num[t]>=d)
{
ans=cost[t]*d;
num[t]-=d;
printf("%lld\n",ans);
}
else
{
ans=num[t]*cost[t];
d-=num[t];
num[t]=0;
for (int i=pos;i<=n;i++)
{
int tpos=a[i].loc;
if(num[tpos]>=d)
{
ans+=cost[tpos]*d;
num[tpos]-=d;
pos=i;
break;
}
else
{
if(num[tpos]==0) continue;
ans+=num[tpos]*cost[tpos];
d-=num[tpos];
num[tpos]=0;
}
}
printf("%lld\n",ans);
}
}
return 0;
}