Submission #821910

#TimeUsernameProblemLanguageResultExecution timeMemory
821910PurpleCrayonDungeon 3 (JOI21_ho_t5)C++17
0 / 100
4074 ms6868 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; #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") 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); } } vector<ll> ps(n); for (int i = 0; i < n; i++) { ps[i] = a[i]; if (i) ps[i] += ps[i-1]; } auto sum = [&](int l, int r) { return ps[r] - (l ? ps[l-1] : 0LL); }; 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 = (prv[i] >= l ? cap - sum(prv[i], i-1) : 0LL); ll cur = min((long long) cap, sum(i, min(r, 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...