#include "meetings.h"
#include <algorithm>
#include <functional>
using namespace std;
typedef long long llong;
typedef pair<int, int> pii;
int n;
const llong inf = 1e18;
vector<llong> ans;
pii seg[1 << 21];
struct query {
int i, l, r;
query(int i, int l, int r) : i(i), l(l), r(r) {}
};
vector<query> qs[750001];
pii arr[750001];
void init(int i, int s, int e) {
if (s == e) {
seg[i] = arr[s];
return;
}
int m = (s + e) / 2;
init(i << 1, s, m);
init(i << 1 | 1, m + 1, e);
seg[i] = max(seg[i << 1], seg[i << 1 | 1]);
}
pii getMax(int i, int s, int e, int x, int y) {
if (e < x || y < s) return pii(0, 0);
if (x <= s && e <= y) return seg[i];
int m = (s + e) / 2;
return max(getMax(i << 1, s, m, x, y), getMax(i << 1 | 1, m + 1, e, x, y));
}
struct line {
int s, e;
llong m, b;
line() {}
line(int s, int e, llong m, llong b) : s(s), e(e), m(m), b(b) {}
llong get(int x) const {
return m * x + b;
}
bool operator<=(const line &p) const {
return get(p.s) <= p.get(p.s) && get(p.e) <= p.get(p.e);
}
} ls[750001];
struct que {
int s, e;
llong add;
que(int s, int e) : s(s), e(e), add(0) {}
llong getRight() const {
if (s > e) return 0;
return ls[e].get(ls[e].e) + add;
}
int size() const {
return e - s + 1;
}
line front() {
line ret = ls[s];
ret.b += add;
return ret;
}
line back() {
line ret = ls[e];
ret.b += add;
return ret;
}
void pop_front() { ++s; }
void pop_back() { --e; }
void push_front(line x) {
x.b -= add;
ls[--s] = x;
}
void push_back(line x) {
x.b -= add;
ls[++e] = x;
}
llong get(int x) const {
int st = s, ed = e;
while (st <= ed) {
int md = (st + ed) / 2;
if (ls[md].s <= x && x <= ls[md].e) return ls[md].get(x) + add;
if (x < ls[md].s) ed = md - 1;
else st = md + 1;
}
return 0;
}
};
que getQuery(int s, int e) {
if (s > e) return que(s, e);
int m = abs(getMax(1, 1, n, s, e).second);
que L = getQuery(s, m - 1);
que R = getQuery(m + 1, e);
for (query q : qs[m]) {
ans[q.i] = min(ans[q.i], R.get(q.r) + (m - q.l + 1ll) * arr[m].first);
}
R.add += (m - s + 1ll) * arr[m].first;
line l(m, m, arr[m].first, L.getRight() + (1ll - m) * arr[m].first);
while (R.size() && l <= R.front()) {
l.e = R.front().e;
R.pop_front();
}
if (R.size()) {
line r = R.front();
R.pop_front();
int st = r.s, ed = r.e;
while (st < ed) {
int md = (st + ed) / 2;
if (l.get(md) < r.get(md)) st = md + 1;
else ed = md;
}
l.e = st - 1;
r.s = st;
R.push_front(r);
}
R.push_front(l);
if (L.size() < R.size()) {
while (L.size()) {
R.push_front(L.back());
L.pop_back();
}
return R;
}
else {
while (R.size()) {
L.push_back(R.front());
R.pop_front();
}
return L;
}
}
vector<llong> minimum_costs(vector<int> H, vector<int> L, vector<int> R) {
n = H.size();
int q = L.size();
ans.resize(q, inf);
for (int i = 0; i < n; ++i) arr[i + 1] = pii(H[i], i + 1);
init(1, 1, n);
for (int i = 0; i < q; ++i) {
int mx = getMax(1, 1, n, L[i] + 1, R[i] + 1).second;
qs[mx].emplace_back(i, L[i] + 1, R[i] + 1);
}
getQuery(1, n);
for (int i = 1; i <= n; ++i) qs[i].clear();
for (int i = 0; i < n; ++i) arr[n - i] = pii(H[i], i - n);
init(1, 1, n);
for (int i = 0; i < q; ++i) {
int mx = -getMax(1, 1, n, n - R[i], n - L[i]).second;
qs[mx].emplace_back(i, n - R[i], n - L[i]);
}
getQuery(1, n);
return ans;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
17888 KB |
Output is correct |
2 |
Correct |
20 ms |
18108 KB |
Output is correct |
3 |
Correct |
20 ms |
18140 KB |
Output is correct |
4 |
Correct |
20 ms |
18080 KB |
Output is correct |
5 |
Correct |
19 ms |
18100 KB |
Output is correct |
6 |
Correct |
20 ms |
18300 KB |
Output is correct |
7 |
Correct |
20 ms |
18140 KB |
Output is correct |
8 |
Correct |
20 ms |
18448 KB |
Output is correct |
9 |
Correct |
19 ms |
18304 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
17888 KB |
Output is correct |
2 |
Correct |
20 ms |
18108 KB |
Output is correct |
3 |
Correct |
20 ms |
18140 KB |
Output is correct |
4 |
Correct |
20 ms |
18080 KB |
Output is correct |
5 |
Correct |
19 ms |
18100 KB |
Output is correct |
6 |
Correct |
20 ms |
18300 KB |
Output is correct |
7 |
Correct |
20 ms |
18140 KB |
Output is correct |
8 |
Correct |
20 ms |
18448 KB |
Output is correct |
9 |
Correct |
19 ms |
18304 KB |
Output is correct |
10 |
Correct |
27 ms |
18680 KB |
Output is correct |
11 |
Correct |
26 ms |
18704 KB |
Output is correct |
12 |
Correct |
28 ms |
18668 KB |
Output is correct |
13 |
Correct |
27 ms |
18620 KB |
Output is correct |
14 |
Correct |
27 ms |
19072 KB |
Output is correct |
15 |
Correct |
27 ms |
18652 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
17988 KB |
Output is correct |
2 |
Correct |
87 ms |
22200 KB |
Output is correct |
3 |
Correct |
297 ms |
37672 KB |
Output is correct |
4 |
Correct |
265 ms |
30452 KB |
Output is correct |
5 |
Correct |
271 ms |
37240 KB |
Output is correct |
6 |
Correct |
285 ms |
38652 KB |
Output is correct |
7 |
Correct |
293 ms |
41168 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
17988 KB |
Output is correct |
2 |
Correct |
87 ms |
22200 KB |
Output is correct |
3 |
Correct |
297 ms |
37672 KB |
Output is correct |
4 |
Correct |
265 ms |
30452 KB |
Output is correct |
5 |
Correct |
271 ms |
37240 KB |
Output is correct |
6 |
Correct |
285 ms |
38652 KB |
Output is correct |
7 |
Correct |
293 ms |
41168 KB |
Output is correct |
8 |
Correct |
283 ms |
31308 KB |
Output is correct |
9 |
Correct |
222 ms |
31004 KB |
Output is correct |
10 |
Correct |
262 ms |
31256 KB |
Output is correct |
11 |
Correct |
271 ms |
30300 KB |
Output is correct |
12 |
Correct |
216 ms |
29924 KB |
Output is correct |
13 |
Correct |
254 ms |
30808 KB |
Output is correct |
14 |
Correct |
300 ms |
38020 KB |
Output is correct |
15 |
Correct |
250 ms |
30272 KB |
Output is correct |
16 |
Correct |
299 ms |
38092 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
17888 KB |
Output is correct |
2 |
Correct |
20 ms |
18108 KB |
Output is correct |
3 |
Correct |
20 ms |
18140 KB |
Output is correct |
4 |
Correct |
20 ms |
18080 KB |
Output is correct |
5 |
Correct |
19 ms |
18100 KB |
Output is correct |
6 |
Correct |
20 ms |
18300 KB |
Output is correct |
7 |
Correct |
20 ms |
18140 KB |
Output is correct |
8 |
Correct |
20 ms |
18448 KB |
Output is correct |
9 |
Correct |
19 ms |
18304 KB |
Output is correct |
10 |
Correct |
27 ms |
18680 KB |
Output is correct |
11 |
Correct |
26 ms |
18704 KB |
Output is correct |
12 |
Correct |
28 ms |
18668 KB |
Output is correct |
13 |
Correct |
27 ms |
18620 KB |
Output is correct |
14 |
Correct |
27 ms |
19072 KB |
Output is correct |
15 |
Correct |
27 ms |
18652 KB |
Output is correct |
16 |
Correct |
17 ms |
17988 KB |
Output is correct |
17 |
Correct |
87 ms |
22200 KB |
Output is correct |
18 |
Correct |
297 ms |
37672 KB |
Output is correct |
19 |
Correct |
265 ms |
30452 KB |
Output is correct |
20 |
Correct |
271 ms |
37240 KB |
Output is correct |
21 |
Correct |
285 ms |
38652 KB |
Output is correct |
22 |
Correct |
293 ms |
41168 KB |
Output is correct |
23 |
Correct |
283 ms |
31308 KB |
Output is correct |
24 |
Correct |
222 ms |
31004 KB |
Output is correct |
25 |
Correct |
262 ms |
31256 KB |
Output is correct |
26 |
Correct |
271 ms |
30300 KB |
Output is correct |
27 |
Correct |
216 ms |
29924 KB |
Output is correct |
28 |
Correct |
254 ms |
30808 KB |
Output is correct |
29 |
Correct |
300 ms |
38020 KB |
Output is correct |
30 |
Correct |
250 ms |
30272 KB |
Output is correct |
31 |
Correct |
299 ms |
38092 KB |
Output is correct |
32 |
Correct |
2335 ms |
112248 KB |
Output is correct |
33 |
Correct |
1790 ms |
108548 KB |
Output is correct |
34 |
Correct |
2319 ms |
116844 KB |
Output is correct |
35 |
Correct |
2588 ms |
114652 KB |
Output is correct |
36 |
Correct |
1797 ms |
115544 KB |
Output is correct |
37 |
Correct |
2329 ms |
117460 KB |
Output is correct |
38 |
Correct |
2847 ms |
173016 KB |
Output is correct |
39 |
Correct |
2845 ms |
173020 KB |
Output is correct |
40 |
Correct |
2703 ms |
124096 KB |
Output is correct |
41 |
Correct |
2977 ms |
219700 KB |
Output is correct |
42 |
Correct |
3463 ms |
218688 KB |
Output is correct |
43 |
Correct |
3444 ms |
218720 KB |
Output is correct |
44 |
Correct |
3212 ms |
172660 KB |
Output is correct |