This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
struct stk {
long long sum = 0;
stack<pii> st;
stk():sum(0){while(!st.empty())st.pop();}
void add(int x) {
int cur = 1;
while(!st.empty() && st.top().first <= x) {
cur += st.top().second;
sum -= 1ll*st.top().first*st.top().second;
st.pop();
}
st.emplace(x, cur);
sum += 1ll*x*cur;
}
} ls, rs;
long long l[5005], r[5005];
std::vector<long long> minimum_costs(std::vector<int> H, std::vector<int> L,
std::vector<int> R) {
int Q = L.size();
std::vector<long long> C(Q);
for (int j = 0; j < Q; ++j) {
C[j] = __LONG_LONG_MAX__;
ls = stk(); rs = stk();
for(int i=L[j];i<=R[j];i++) {
ls.add(H[i]); l[i] = ls.sum;
}
for(int i=R[j];i>=L[j];i--) {
rs.add(H[i]); r[i] = rs.sum;
}
for(int i=L[j];i<=R[j];i++) {
C[j] = min(C[j], l[i] + r[i] - H[i]);
}
}
return C;
}
/*
4 2
2 4 3 5
0 2
1 3
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |