#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<ll> vll;
typedef vector<int> vi;
typedef vector<ii> vii;
#define REP(a,b,c) for(int a=int(b); a<int(c); a++)
#define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--)
#define RE(a,b) REP(a,0,b)
#define RE1(a,b) REP(a,1,b+1)
#define FOR(a,b) for(auto& a : b)
#define pb push_back
#define fi first
#define se second
#define all(a) a.begin(), a.end()
const int MXH = 21;
const int N = (1<<17);
struct T {
int resl[MXH], resr[MXH];
int minl[MXH], minr[MXH];
int maxh;
};
T combine(const T& l, const T& r) {
if(l.maxh == 0) return r;
if(r.maxh == 0) return l;
T res;
res.maxh = max(l.maxh, r.maxh);
RE(i,MXH) res.minl[i] = l.minl[i] + r.minl[max(i,l.maxh)];
RE(i,MXH) res.minr[i] = r.minr[i] + l.minr[max(i,r.maxh)];
RE(i,MXH) res.resl[i] = res.resr[i] = 1e9;
RE(i,res.maxh+1) {
res.resl[i ] = min(res.resl[i], l.resl[i] + r.minl[l.maxh]);
res.resr[i ] = min(res.resr[i], r.resr[i] + l.minr[r.maxh]);
if(l.maxh == res.maxh && r.maxh != res.maxh)
res.resr[max(r.maxh,i)] = min(res.resr[max(r.maxh,i)], l.resr[i] + r.minl[i]);
else
res.resl[max(l.maxh,i)] = min(res.resl[max(l.maxh,i)], l.resr[i] + r.minl[i]);
if(l.maxh != res.maxh && r.maxh == res.maxh)
res.resl[max(l.maxh,i)] = min(res.resl[max(l.maxh,i)], r.resl[i] + l.minr[i]);
else
res.resr[max(r.maxh,i)] = min(res.resr[max(r.maxh,i)], r.resl[i] + l.minr[i]);
}
return res;
}
T createSingle(int x) {
T res;
res.maxh = x;
RE(i,MXH) res.resl[i]=res.resr[i]=1e9;
res.resl[x] = res.resr[x] = x;
RE(i,MXH) res.minl[i]=res.minr[i]=max(x,i);
return res;
}
T createEmpty() {
T res;
res.maxh = 0;
return res;
}
T seg[N*2];
int h[N];
void buildSeg(int p=1, int l=0, int r=N-1) {
if(l == r) {
seg[p] = createSingle(h[l]);
return;
}
int m=(l+r)/2;
buildSeg(p*2 ,l ,m);
buildSeg(p*2+1,m+1,r);
seg[p] = combine(seg[p*2], seg[p*2+1]);
}
T getSeg(int i, int j, int p=1, int l=0, int r=N-1) {
if(j < l || i > r) return createEmpty();
if(i <= l && j >= r) return seg[p];
int m=(l+r)/2;
T a = getSeg(i,j,p*2 ,l ,m);
T b = getSeg(i,j,p*2+1,m+1,r);
return combine(a,b);
}
vll minimum_costs(vi H, vi L, vi R) {
int n = H.size();
int q = L.size();
if(n <= 5000 && q <= 5000) {
vector<vll> costL, costR;
RE(i,2) (i?costL:costR).assign(n,vll(n,0));
RE(i,n) {
ll mx = 0;
ll res = 0;
REP(j,i,n) {
mx = max<ll>(mx,H[j]);
res += mx;
costR[j][i] = res;
}
mx = res = 0;
REV(j,0,i+1) {
mx = max<ll>(mx,H[j]);
res += mx;
costL[j][i] = res;
}
}
vll C(q,1e18);
RE(cq,q) {
int l=L[cq], r=R[cq];
REP(i,l,r+1) {
C[cq] = min(C[cq], costL[l][i] + costR[r][i] - H[i]);
}
}
return C;
} else {
RE(i,n) h[i]=H[i];
buildSeg();
vll C(q,1e18);
RE(cq,q) {
int l=L[cq], r=R[cq];
T res = getSeg(l,r);
RE(i,MXH) {
C[cq] = min<ll>(C[cq], min(res.resr[i], res.resl[i]));
}
}
return C;
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
153 ms |
141460 KB |
Output is correct |
3 |
Correct |
170 ms |
141468 KB |
Output is correct |
4 |
Correct |
163 ms |
141460 KB |
Output is correct |
5 |
Correct |
175 ms |
141460 KB |
Output is correct |
6 |
Correct |
172 ms |
141460 KB |
Output is correct |
7 |
Correct |
150 ms |
141456 KB |
Output is correct |
8 |
Correct |
149 ms |
141460 KB |
Output is correct |
9 |
Correct |
212 ms |
141576 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
153 ms |
141460 KB |
Output is correct |
3 |
Correct |
170 ms |
141468 KB |
Output is correct |
4 |
Correct |
163 ms |
141460 KB |
Output is correct |
5 |
Correct |
175 ms |
141460 KB |
Output is correct |
6 |
Correct |
172 ms |
141460 KB |
Output is correct |
7 |
Correct |
150 ms |
141456 KB |
Output is correct |
8 |
Correct |
149 ms |
141460 KB |
Output is correct |
9 |
Correct |
212 ms |
141576 KB |
Output is correct |
10 |
Correct |
712 ms |
392212 KB |
Output is correct |
11 |
Correct |
659 ms |
392260 KB |
Output is correct |
12 |
Correct |
631 ms |
392208 KB |
Output is correct |
13 |
Correct |
643 ms |
392208 KB |
Output is correct |
14 |
Correct |
616 ms |
392208 KB |
Output is correct |
15 |
Correct |
609 ms |
392256 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
256 KB |
Output is correct |
2 |
Correct |
220 ms |
88764 KB |
Output is correct |
3 |
Correct |
556 ms |
91036 KB |
Output is correct |
4 |
Correct |
583 ms |
91040 KB |
Output is correct |
5 |
Correct |
218 ms |
90952 KB |
Output is correct |
6 |
Correct |
466 ms |
91040 KB |
Output is correct |
7 |
Correct |
579 ms |
91040 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
256 KB |
Output is correct |
2 |
Correct |
220 ms |
88764 KB |
Output is correct |
3 |
Correct |
556 ms |
91036 KB |
Output is correct |
4 |
Correct |
583 ms |
91040 KB |
Output is correct |
5 |
Correct |
218 ms |
90952 KB |
Output is correct |
6 |
Correct |
466 ms |
91040 KB |
Output is correct |
7 |
Correct |
579 ms |
91040 KB |
Output is correct |
8 |
Correct |
660 ms |
91040 KB |
Output is correct |
9 |
Correct |
638 ms |
90952 KB |
Output is correct |
10 |
Correct |
513 ms |
91040 KB |
Output is correct |
11 |
Correct |
660 ms |
91064 KB |
Output is correct |
12 |
Correct |
666 ms |
90980 KB |
Output is correct |
13 |
Correct |
548 ms |
90948 KB |
Output is correct |
14 |
Correct |
652 ms |
91040 KB |
Output is correct |
15 |
Correct |
602 ms |
91040 KB |
Output is correct |
16 |
Correct |
610 ms |
91084 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
153 ms |
141460 KB |
Output is correct |
3 |
Correct |
170 ms |
141468 KB |
Output is correct |
4 |
Correct |
163 ms |
141460 KB |
Output is correct |
5 |
Correct |
175 ms |
141460 KB |
Output is correct |
6 |
Correct |
172 ms |
141460 KB |
Output is correct |
7 |
Correct |
150 ms |
141456 KB |
Output is correct |
8 |
Correct |
149 ms |
141460 KB |
Output is correct |
9 |
Correct |
212 ms |
141576 KB |
Output is correct |
10 |
Correct |
712 ms |
392212 KB |
Output is correct |
11 |
Correct |
659 ms |
392260 KB |
Output is correct |
12 |
Correct |
631 ms |
392208 KB |
Output is correct |
13 |
Correct |
643 ms |
392208 KB |
Output is correct |
14 |
Correct |
616 ms |
392208 KB |
Output is correct |
15 |
Correct |
609 ms |
392256 KB |
Output is correct |
16 |
Correct |
1 ms |
256 KB |
Output is correct |
17 |
Correct |
220 ms |
88764 KB |
Output is correct |
18 |
Correct |
556 ms |
91036 KB |
Output is correct |
19 |
Correct |
583 ms |
91040 KB |
Output is correct |
20 |
Correct |
218 ms |
90952 KB |
Output is correct |
21 |
Correct |
466 ms |
91040 KB |
Output is correct |
22 |
Correct |
579 ms |
91040 KB |
Output is correct |
23 |
Correct |
660 ms |
91040 KB |
Output is correct |
24 |
Correct |
638 ms |
90952 KB |
Output is correct |
25 |
Correct |
513 ms |
91040 KB |
Output is correct |
26 |
Correct |
660 ms |
91064 KB |
Output is correct |
27 |
Correct |
666 ms |
90980 KB |
Output is correct |
28 |
Correct |
548 ms |
90948 KB |
Output is correct |
29 |
Correct |
652 ms |
91040 KB |
Output is correct |
30 |
Correct |
602 ms |
91040 KB |
Output is correct |
31 |
Correct |
610 ms |
91084 KB |
Output is correct |
32 |
Runtime error |
333 ms |
42000 KB |
Execution killed with signal 11 |
33 |
Halted |
0 ms |
0 KB |
- |