Submission #533066

#TimeUsernameProblemLanguageResultExecution timeMemory
533066qwerasdfzxclDungeon 3 (JOI21_ho_t5)C++14
11 / 100
4100 ms9096 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; int a[200200], b[200200]; ll S[200200], ans; struct Seg{ pair<int, int> tree[400400]; int sz; void init(int n){ sz = n; for (int i=sz;i<sz*2;i++) tree[i] = {b[i-sz], i-sz}; for (int i=sz-1;i;i--) tree[i] = min(tree[i<<1], tree[i<<1|1]); } pair<int, int> query(int l, int r){ pair<int, int> ret = {2e9, 0}; for (l+=sz, r+=sz;l<r;l>>=1, r>>=1){ if (l&1) ret = min(ret, tree[l++]); if (r&1) ret = min(ret, tree[--r]); } return ret; } }tree; void dnc(int s, int t, int u, int h){ if (ans==-1) return; if (s>=t) return; auto p = tree.query(s, t); ll need = min(S[t-1] - S[p.second-1], (ll)u); ll cur = max(h - (S[p.second-1] - S[s-1]), 0LL); need = max(need, cur); if (a[p.second]>u) {ans = -1; return;} ans += (need-cur) * p.first; //printf(" %d %d %d %d: %lld %lld / %d %d\n", s, t, u, h, need, cur, p.first, p.second); dnc(s, p.second, u, h); dnc(p.second+1, t, u, need - a[p.second]); } int main(){ int n, q; scanf("%d %d", &n, &q); for (int i=1;i<=n;i++) scanf("%d", a+i); for (int i=1;i<=n;i++) scanf("%d", b+i); for (int i=1;i<=n;i++) S[i] = S[i-1] + a[i]; tree.init(n+1); while(q--){ int s, t, u; scanf("%d %d %d", &s, &t, &u); ans = 0; dnc(s, t, u, 0); printf("%lld\n", ans); } return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:44:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |     scanf("%d %d", &n, &q);
      |     ~~~~~^~~~~~~~~~~~~~~~~
Main.cpp:45:33: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |     for (int i=1;i<=n;i++) scanf("%d", a+i);
      |                            ~~~~~^~~~~~~~~~~
Main.cpp:46:33: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |     for (int i=1;i<=n;i++) scanf("%d", b+i);
      |                            ~~~~~^~~~~~~~~~~
Main.cpp:53:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   53 |         scanf("%d %d %d", &s, &t, &u);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...