Submission #1321717

#TimeUsernameProblemLanguageResultExecution timeMemory
1321717M_W_13Sightseeing in Kyoto (JOI22_kyoto)C++20
0 / 100
0 ms332 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...