Submission #817941

#TimeUsernameProblemLanguageResultExecution timeMemory
817941AdamGSDungeon 3 (JOI21_ho_t5)C++17
11 / 100
4081 ms13060 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(),a.end() const int LIM=2e5+7; ll A[LIM], pos[LIM], B[LIM], mi[LIM]; ll solve(int l, int r, ll u) { ll ans=0, akt=0; while(l<r) { if(min(pos[mi[l]], pos[r])-pos[l]>akt) { ans+=B[l]*min(min(pos[mi[l]], pos[r])-pos[l]-akt, u-akt); akt=min(min(pos[mi[l]], pos[r])-pos[l], u); } akt-=A[l]; ++l; if(akt<0) return -1; } return ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; rep(i, n) { cin >> A[i]; pos[i+1]=pos[i]+A[i]; } rep(i, n) cin >> B[i]; A[n]=-1; stack<pair<ll,ll>>S; S.push({-1, n}); for(int i=n-1; i>=0; --i) { while(S.top().st>B[i]) S.pop(); mi[i]=S.top().nd; S.push({B[i], i}); } while(m--) { ll l, r, u; cin >> l >> r >> u; --l; --r; cout << solve(l, r, u) << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...