Submission #1303812

#TimeUsernameProblemLanguageResultExecution timeMemory
1303812KietJDungeon 3 (JOI21_ho_t5)C++20
0 / 100
4093 ms4552 KiB
#include <bits/stdc++.h> using namespace std; #define f first #define s second #define pb(x) push_back(x) #define sz(x) (int) x.size() #define all(x) x.begin(), x.end() #define un(x) (x).erase(unique(all(x)), x.end()) typedef long long ll; typedef double db; typedef pair <int, int> ii; typedef pair <ll, ll> pll; typedef vector <ll> V; const int N = 2e5 + 10; // template <class T1, class Gz> void add(T1 &x, Gz y) { x += y; if (x < 0) x += mod; if (x >= mod) x -= mod; } template <class T1, class Gz> bool maximize(T1 &x, Gz y) { if (x < y) { x = y; return true; } return false; } template <class T1, class Gz> bool minimize(T1 &x, Gz y) { if (x > y) { x = y; return true; } return false; } int n, m; int a[N], b[N]; struct Data { int s, t, u; } Q[N]; namespace sub1 { const int N = 3e3 + 1; int prev[N], nxt[N], sum[N]; int cost(int l, int r) { if (l > r) return 0; return sum[r] - sum[l - 1]; } void solve() { for(int i = 1; i <= n; i++) { sum[i] = sum[i - 1] + a[i]; } stack <int> st; for(int i = 1; i <= n; i++) { while (sz(st) && b[st.top()] >= b[i]) st.pop(); prev[i] = sz(st) ? st.top() : 0; st.push(i); } while (sz(st)) st.pop(); for(int i = n; i >= 1; i--) { while (sz(st) && b[st.top()] > b[i]) st.pop(); nxt[i] = sz(st) ? st.top() : n + 1; st.push(i); } for(int i = 1; i <= m; i++) { int s = Q[i].s, t = Q[i].t, u = Q[i].u; bool flag = false; for(int j = s; j < t; j++) { if (u < a[j]) flag = true; } if (flag) { cout << "-1\n"; continue; } ll ans = 0; for(int j = s; j < t; j++) { int rem = prev[j] >= s ? max(0, u - cost(prev[j], j - 1)) : 0; int cur = min(u, cost(j, min(nxt[j], t) - 1)) - rem; maximize(cur, 0); ans += cur * b[j]; } cout << ans << endl; } } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int i = 1; i <= n; i++) { cin >> b[i]; } for(int i = 1; i <= m; i++) { int s, t, u; cin >> s >> t >> u; Q[i] = {s, t, u}; } sub1::solve(); 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...