Submission #821908

#TimeUsernameProblemLanguageResultExecution timeMemory
821908PurpleCrayonDungeon 3 (JOI21_ho_t5)C++17
0 / 100
4094 ms5428 KiB
#include <bits/stdc++.h> using namespace std; #define sz(v) int(v.size()) #define ar array typedef long long ll; const int N = 5e2+10, MOD = 998244353; void solve() { int n, m; cin >> n >> m; vector<ll> a(n); for (auto& x : a) cin >> x; vector<ll> b(n); for (auto& x : b) cin >> x; vector<int> prv(n, -1), nxt(n, n); { vector<int> st; for (int i = 0; i < n; i++) { while (sz(st) && b[st.back()] >= b[i]) st.pop_back(); if (sz(st)) prv[i] = st.back(); st.push_back(i); } } { vector<int> st; for (int i = n-1; i >= 0; i--) { while (sz(st) && b[st.back()] > b[i]) st.pop_back(); if (sz(st)) nxt[i] = st.back(); st.push_back(i); } } auto sum = [&](int l, int r) { assert(l <= r); ll ans = 0; for (int i = l; i <= r; i++) ans += a[i]; return ans; }; while (m--) { int l, r, cap; cin >> l >> r >> cap, --l, --r; bool bad = 0; for (int i = l; i < r; i++) { if (a[i] > cap) { bad = 1; } } if (bad) { cout << -1 << '\n'; continue; } ll ans = 0; for (int i = l; i < r; i++) { ll lose = 0; if (prv[i] >= l) lose = max(0LL, cap - sum(prv[i], i-1)); ll cur = min((long long) cap, sum(i, min(r-1, nxt[i]-1))) - lose; cur = max(cur, 0LL); ans += cur * b[i]; } cout << ans << '\n'; } } int main() { ios::sync_with_stdio(false); cin.tie(0); int T = 1; // cin >> T; while (T--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...