Submission #1229939

#TimeUsernameProblemLanguageResultExecution timeMemory
1229939gry3125Bikeparking (EGOI24_bikeparking)C++20
100 / 100
234 ms21504 KiB
#include <bits/stdc++.h> #define pb push_back #define all(v) (v).begin(),(v).end() #define ll long long int #define fi first #define se second using namespace std; int main() { ll n, r = 0; cin >> n; multiset<ll> x; vector<ll> y(n), cnt(n); for (int i = 0; i < n; i++) { ll xi; cin >> xi; if (xi != 0) x.insert(i); cnt[i] = xi; } for (int i = 0; i < n; i++) cin >> y[i]; for (int i = 0; i < n; i++) { while (y[i] > 0) { auto it = x.lower_bound(i); if (it == x.begin()) break; auto val = *prev(it); if (y[i] < cnt[val]) { cnt[val] -= y[i]; r += y[i]; y[i] = 0; } else { x.erase(x.find(val)); y[i] -= cnt[val]; r += cnt[val]; cnt[val] = 0; } } } vector<ll> rx(n); for (auto p : x) { rx[p] = cnt[p]; } ll c = 0; for (int i = n-1; i >= 0; i--) { if (c == n) continue; while (y[i] > 0) { while (c < n && rx[c] == 0) c++; if (c == n) break; if (y[i] <= rx[c]) { if (i < c) r -= y[i]; if (i > c) r += y[i]; rx[c] -= y[i]; y[i] = 0; } else { if (i < c) r -= rx[c]; if (i > c) r += rx[c]; y[i] -= rx[c]; rx[c] = 0; } } } cout << r; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...