Submission #1196399

#TimeUsernameProblemLanguageResultExecution timeMemory
1196399Zero_OPDungeon 3 (JOI21_ho_t5)C++20
11 / 100
4094 ms14172 KiB
#include <bits/stdc++.h> using namespace std; #define all(v) begin(v), end(v) #define rall(v) rbegin(v), rend(v) #define sz(v) (int)v.size() #define pb push_back #define eb emplace_back #define compact(v) v.erase(unique(all(v)), end(v)) #define mp make_pair #define mt make_tuple #define ff first #define ss second #define dbg(x) "[" #x " = " << (x) << "]" template<typename T> bool minimize(T& a, const T& b){ if(a > b) return a = b, true; return false; } template<typename T> bool maximize(T& a, const T& b){ if(a < b) return a = b, true; return false; } using ll = long long; using ull = unsigned long long; using db = double; using ld = long double; using pi = pair<int, int>; using pl = pair<ll, ll>; using vi = vector<int>; using vl = vector<ll>; using vc = vector<char>; using vb = vector<bool>; using vpi = vector<pi>; using vpl = vector<pl>; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); #ifdef LOCAL freopen("task.inp", "r", stdin); freopen("task.out", "w", stdout); #endif //LOCAL int N, M; cin >> N >> M; vl X(N+1), B(N), A(N); for(int i = 0; i < N; ++i) { cin >> A[i]; } for(int i = 0; i < N; ++i) X[i+1] = X[i] + A[i]; for(int i = 0; i < N; ++i) cin >> B[i]; for(int _ = 0; _ < M; ++_){ int S, T, U; cin >> S >> T >> U; --S, --T; vector<tuple<int, int, int>> events; for(int i = S; i < T; ++i){ events.eb(X[i], -1, B[i]); events.eb(min(X[i] + U, X[T]), +1, B[i]); events.eb(X[i+1], 0, 0); } multiset<int> v; sort(all(events)); int last = -1; ll ans = 0; for(auto [t, type, cost] : events){ if(last != -1 && last != t){ if(v.empty()){ ans = -1; break; } ans += 1LL * (*v.begin()) * (t - last); } if(type == -1) v.insert(cost); if(type == +1) v.erase(v.lower_bound(cost)); last = t; } cout << ans << '\n'; } return 0; } /* Transformed Problem : - Given \sum_{A[i]} points - Each query (S, T, U) : calculate the minimum cost to cover [X[S], X[T]], we have N segments [X[i], X[i]+U] with cost B[i] for each element. */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...