第一次写博客
TLE了,等以后来改,mark一下
#include <bits/stdc++.h>
using namespace std;
long long n,m,a[100005],c[100005],ans[100005];
// void check(){
// for(int i=0;i<n;i++) cout<<a[i]<<' ';
// cout<<endl;
// }
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>m;
vector<pair<long long,long long> > v;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>c[i];
}
for(int i=0;i<m;i++){
long long t,d;
cin>>t>>d;
v.push_back(make_pair(t,d));
}
for(int i=0;i<m;i++){
long long pay=0;
long long num=v[i].first-1;
long long cnt=v[i].second;
if(a[num]>cnt){
a[num]=a[num]-cnt;
pay+=(c[num]*cnt);
cnt=0;
//cout<<pay<<endl;
}
else{
pay+=(a[num]*c[num]);
cnt-=a[num];
a[num]=0;
c[num]=INT_MAX;
/*cout<<num<<endl;
cout<<c[num]<<endl;*/
// cout<<cnt<<endl;
// cout<<pay<<endl;
}
while(cnt>0){
int flag=1,min_index=0;
for(int j=0;j<n;j++){
if(a[j]!=0) flag=0;
//cout<<c[j]<<endl;
if(c[j]<c[min_index]) min_index=j;
}
//cout<<min_index<<endl;
if(flag) {pay=0; break;}
pay+=c[min_index];
a[min_index]--;
if(a[min_index]==0) c[min_index]=INT_MAX;
cnt--;
}
cout<<pay<<endl;
//if(ans[i]!=0) ans[i]=pay;
//check();
}
// for(int i=0;i<m;i++){
// cout<<ans[i]<<endl;
// }
return 0;
}