题解
直接模拟 ,肯定不行。
考虑第一只牛,分两种情况:
1. 时,直接加 。
2.否则,,继续处理。
理论时间复杂度 。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,a[200001],b[200001];
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
for(int i=1;i<=m;i++){
if(a[1]>=b[i]){
a[1]+=b[i];
continue;
}
int now=0;
for(int j=1;j<=n;j++){
if(a[j]<=now||now>=b[i])continue;
int x=a[j];
a[j]+=min(a[j]-now,b[i]-now);
now=x;
// cout<<" "<<a[j];
// cout<<now<<endl;
}
// cout<<endl;
}
for(int i=1;i<=n;i++)cout<<a[i]<<endl;
return 0;
}