#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int ccw(array<ll, 2> a, array<ll, 2> b, array<ll, 2> c) {
return a[0]*b[1]+b[0]*c[1]+c[0]*a[1] - (a[1]*b[0]+b[1]*c[0]+c[1]*a[0]);
}
vector<array<ll, 2>> solve(vector<ll> a) {
vector<array<ll, 2>> re;
for(int i=0;i<a.size();i++) {
while(re.size() > 1 && ccw(re.rbegin()[1], re.back(), {i, a[i]}) <= 0) re.pop_back();
re.push_back({i, a[i]});
}
return re;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, m; cin >> n >> m;
vector<ll> a(n), b(m);
for(auto &x : a) cin >> x;
for(auto &x : b) cin >> x;
auto L = solve(a), R = solve(b);
ll ans = 0;
while(L.size() > 1 || R.size() > 1) {
if(R.size() == 1 || (L.size() > 1 && (R.back()[1]-R.rbegin()[1][1])*(L.back()[0]-L.rbegin()[1][0]) <= (L.back()[1]-L.rbegin()[1][1])*(R.back()[0]-R.rbegin()[1][0]))) {
auto k = L.back(); L.pop_back();
ans += R.back()[1] * (k[0] - L.back()[0]);
} else {
auto k = R.back(); R.pop_back();
ans += L.back()[1] * (k[0] - R.back()[0]);
}
}
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |