#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n) for (int i = 0; i < (n); i++)
#define st first
#define nd second
#define pb push_back
#define pii pair<int, int>
#define pll pair<ll, ll>
#define all(a) a.begin(), a.end()
const ll INF = 1e18;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, m;
cin >> n >> m;
ll A[n];
ll B[m];
rep(i, n) cin >> A[i];
rep(i, m) cin >> B[i];
vector<ll> ma;
vector<ll> xma;
vector<ll> mb;
vector<ll> xmb;
ll last = INF;
int x1 = -1;
rep(i, n) {
if (last >= A[i]) {
ma.pb(A[i]);
xma.pb(i);
last = A[i];
x1 = i;
}
}
int y1 = -1;
last = INF;
rep(i, m) {
if (last >= B[i]) {
mb.pb(B[i]);
xmb.pb(i);
last = B[i];
y1 = i;
}
}
vector<ll> ra;
vector<ll> xra;
vector<ll> rb;
vector<ll> xrb;
last = INF;
for (int i = n - 1; i >= x1; i--) {
if (last >= A[i]) {
ra.pb(A[i]);
xra.pb(i);
last = A[i];
}
}
last = INF;
for (int i = m - 1; i >= y1; i--) {
if (last >= B[i]) {
rb.pb(B[i]);
xrb.pb(i);
last = B[i];
}
}
ll ans = 0;
int it1 = 0;
int it2 = 0;
int sza = ma.size();
int szb = mb.size();
while (it1 < (sza - 1) || it2 < (szb - 1)) {
if (it1 == (sza - 1)) {
ans += (ma[it1] * (xmb[it2 + 1] - xmb[it2]));
it2++;
}
else if (it2 == (szb - 1)) {
ans += (mb[it2] * (xma[it1 + 1] - xma[it1]));
it1++;
}
else {
ll dla = xma[it1 + 1] - xma[it1];
ll dlb = xmb[it2 + 1] - xmb[it2];
ll poma = ma[it1] * dlb + mb[it2 + 1] * dla;
ll pomb = mb[it2] * dla + ma[it1 + 1] * dlb;
if (poma <= pomb) {
ans += (ma[it1] * dlb);
it2++;
}
else {
ans += (mb[it2] * dla);
it1++;
}
}
}
sza = ra.size();
szb = rb.size();
it1 = 0;
it2 = 0;
while (it1 < (sza - 1) || it2 < (szb - 1)) {
if (it1 == (sza - 1)) {
ans += (ra[it1] * (xrb[it2] - xrb[it2 + 1]));
it2++;
}
else if (it2 == (szb - 1)) {
ans += (rb[it2] * (xra[it1] - xra[it1 + 1]));
it1++;
}
else {
ll dla = abs(xra[it1 + 1] - xra[it1]);
ll dlb = abs(xrb[it2 + 1] - xrb[it2]);
ll poma = ra[it1] * dlb + rb[it2 + 1] * dla;
ll pomb = rb[it2] * dla + ra[it1 + 1] * dlb;
if (poma <= pomb) {
ans += (ra[it1] * dlb);
it2++;
}
else {
ans += (rb[it2] * dla);
it1++;
}
}
}
cout << ans << '\n';
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |