#include <bits/stdc++.h>
using namespace std;
#define sz(x) (int) (x).size()
#define all(x) (x).begin(), (x).end()
#define show(x) cerr << #x << " is " << x << endl;
#define show2(x,y) cerr << #x << " is " << x << " " << #y << " is " << y << endl;
#define show3(x,y,z) cerr << #x << " is " << x << " " << #y << " is " << y << " " << #z << " is " << z << endl;
#define showlist(x) cerr << #x << " is "; for(auto p : x) cerr << p << " "; cerr << endl;
#define int long long
typedef pair<int,int> ii;
int spots[300005];
int ppl[300005];
signed main(){
ios_base::sync_with_stdio(false); cin.tie(0);
int n; cin >> n;
for(int i = 0;i < n;i++) cin >> spots[i];
for(int i = 0;i < n;i++) cin >> ppl[i];
int good = 0;
vector<int> S;
for(int i = 0;i < n;i++){
while(not S.empty()){
if(ppl[i] == 0) break;
int j = S.back();
if(spots[j] == 0){
S.pop_back();
continue;
}
int taken = min(ppl[i], spots[j]);
good += taken;
spots[j] -= taken;
ppl[i] -= taken;
}
S.push_back(i);
}
int bad = 0;
/// settle neutral
for(int i = 0;i < n;i++){
int taken = min(spots[i], ppl[i]);
spots[i] -= taken;
ppl[i] -= taken;
bad += ppl[i];
}
cout << good-bad;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |