#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
int n;
cin >> n;
set <pair <ll, ll>> X, Y;
for (int i = 0; i < n; i++) {
int tp;
cin >> tp;
X.insert({i, tp});
}
for (int i = 0; i < n; i++) {
int tp;
cin >> tp;
Y.insert({tp, -i});
}
ll ans = 0;
set <pair <ll, ll>> todo;
for (int i = 0; i < n; i++) {
int y = Y.rbegin()->first;
int id = -Y.rbegin()->second;
Y.erase(--Y.end());
while (y > 0) {
auto it = X.lower_bound({id, 0});
if (it == X.begin()) {
if (y == 0)
break;
todo.insert({y, -id});
break;
}
it--;
int x = it->second;
int id2 = it->first;
X.erase(it);
int amt = min(x, y);
ans += amt;
x -= amt;
y -= amt;
if (x > 0) {
X.insert({id2, x});
// y = 0
break;
}
}
}
for (auto i : todo) {
int y = i.first;
int id = i.second;
auto it = X.lower_bound({id, 0});
if (it->first != id)
ans -= y;
}
cout << ans << '\n';
}
# | 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... |