#include <bits/stdc++.h>
#include "meetings.h"
using namespace std;
const long long inf = 1e18;
const long long MAXN1 = 5007;
const long long MAXN = 75e4 + 7;
int n, q;
long long cost[MAXN1][MAXN1];
struct node{
int m, l, r, cnt;
node(){}
node(int m, int l, int r){
this->m = m;
this->l = l;
this->r = r;
cnt = 1;
}
};
node unite(node lvalue, node rvalue){
node ret;
ret.m = max(max(lvalue.m, rvalue.m), lvalue.r + rvalue.l);
ret.l = (lvalue.l == lvalue.cnt) ? (lvalue.l + rvalue.l) : lvalue.l;
ret.r = (rvalue.l == rvalue.cnt) ? (lvalue.r + rvalue.r) : rvalue.r;
ret.m = max(ret.m, max(ret.l, ret.r));
ret.cnt = lvalue.cnt + rvalue.cnt;
return ret;
}
node st[4 * MAXN];
int a[MAXN];
void init(int idx, int l, int r){
if(l == r){
st[idx].m = st[idx].l = st[idx].r = (a[l] == 1);
st[idx].cnt = 1;
return;
}
int mid = (l + r) >> 1;
init(2 * idx, l, mid);
init(2 * idx + 1, mid + 1, r);
st[idx] = unite(st[2 * idx], st[2 * idx + 1]);
}
node query(int idx, int l, int r, int sl, int sr){
if(sl <= l && r <= sr){
return st[idx];
}
if(l > sr || r < sl){
return node(0, 0, 0);
}
int mid = (l + r) >> 1;
node lvalue = query(2 * idx, l, mid, sl, sr);
node rvalue = query(2 * idx + 1, mid + 1, r, sl, sr);
return unite(lvalue, rvalue);
}
vector<long long> minimum_costs(vector<int> H, vector<int> L, vector<int> R){
vector<long long> ret;
n = (int)H.size();
q = (int)L.size();
if(n > 5000 || q > 5000){
for(int i = 0; i < n; i++){
a[i] = H[i];
}
init(1, 0, n - 1);
for(int i = 0; i < q; i++){
ret.push_back(2 * (R[i] - L[i] + 1) - query(1, 0, n - 1, L[i], R[i]).m);
}
return ret;
}
for(int i = 0; i < n; i++){
long long mx = H[i];
cost[i][i] = H[i];
for(int j = i + 1; j < n; j++){
mx = max(mx, (long long)H[j]);
cost[i][j] = cost[i][j - 1] + mx;
}
mx = H[i];
for(int j = i - 1; j >= 0; j--){
mx = max(mx, (long long)H[j]);
cost[i][j] = cost[i][j + 1] + mx;
}
}
for(int i = 0; i < q; i++){
int l = L[i], r = R[i];
long long ans = inf;
for(int j = l; j <= r; j++){
ans = min(ans, cost[j][l] + cost[j][r] - H[j]);
}
ret.push_back(ans);
}
return ret;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
81 ms |
82812 KB |
Output is correct |
3 |
Correct |
83 ms |
82908 KB |
Output is correct |
4 |
Correct |
83 ms |
82820 KB |
Output is correct |
5 |
Correct |
83 ms |
82812 KB |
Output is correct |
6 |
Correct |
82 ms |
82880 KB |
Output is correct |
7 |
Correct |
81 ms |
82880 KB |
Output is correct |
8 |
Correct |
81 ms |
82800 KB |
Output is correct |
9 |
Correct |
82 ms |
82908 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
81 ms |
82812 KB |
Output is correct |
3 |
Correct |
83 ms |
82908 KB |
Output is correct |
4 |
Correct |
83 ms |
82820 KB |
Output is correct |
5 |
Correct |
83 ms |
82812 KB |
Output is correct |
6 |
Correct |
82 ms |
82880 KB |
Output is correct |
7 |
Correct |
81 ms |
82880 KB |
Output is correct |
8 |
Correct |
81 ms |
82800 KB |
Output is correct |
9 |
Correct |
82 ms |
82908 KB |
Output is correct |
10 |
Correct |
477 ms |
196504 KB |
Output is correct |
11 |
Correct |
663 ms |
196596 KB |
Output is correct |
12 |
Correct |
479 ms |
196620 KB |
Output is correct |
13 |
Correct |
710 ms |
196504 KB |
Output is correct |
14 |
Correct |
488 ms |
196580 KB |
Output is correct |
15 |
Correct |
481 ms |
196548 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
348 KB |
Output is correct |
2 |
Correct |
41 ms |
2032 KB |
Output is correct |
3 |
Correct |
127 ms |
8336 KB |
Output is correct |
4 |
Correct |
128 ms |
8404 KB |
Output is correct |
5 |
Correct |
99 ms |
8360 KB |
Output is correct |
6 |
Correct |
118 ms |
8304 KB |
Output is correct |
7 |
Correct |
126 ms |
8316 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
348 KB |
Output is correct |
2 |
Correct |
41 ms |
2032 KB |
Output is correct |
3 |
Correct |
127 ms |
8336 KB |
Output is correct |
4 |
Correct |
128 ms |
8404 KB |
Output is correct |
5 |
Correct |
99 ms |
8360 KB |
Output is correct |
6 |
Correct |
118 ms |
8304 KB |
Output is correct |
7 |
Correct |
126 ms |
8316 KB |
Output is correct |
8 |
Incorrect |
129 ms |
8324 KB |
Output isn't correct |
9 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
81 ms |
82812 KB |
Output is correct |
3 |
Correct |
83 ms |
82908 KB |
Output is correct |
4 |
Correct |
83 ms |
82820 KB |
Output is correct |
5 |
Correct |
83 ms |
82812 KB |
Output is correct |
6 |
Correct |
82 ms |
82880 KB |
Output is correct |
7 |
Correct |
81 ms |
82880 KB |
Output is correct |
8 |
Correct |
81 ms |
82800 KB |
Output is correct |
9 |
Correct |
82 ms |
82908 KB |
Output is correct |
10 |
Correct |
477 ms |
196504 KB |
Output is correct |
11 |
Correct |
663 ms |
196596 KB |
Output is correct |
12 |
Correct |
479 ms |
196620 KB |
Output is correct |
13 |
Correct |
710 ms |
196504 KB |
Output is correct |
14 |
Correct |
488 ms |
196580 KB |
Output is correct |
15 |
Correct |
481 ms |
196548 KB |
Output is correct |
16 |
Correct |
2 ms |
348 KB |
Output is correct |
17 |
Correct |
41 ms |
2032 KB |
Output is correct |
18 |
Correct |
127 ms |
8336 KB |
Output is correct |
19 |
Correct |
128 ms |
8404 KB |
Output is correct |
20 |
Correct |
99 ms |
8360 KB |
Output is correct |
21 |
Correct |
118 ms |
8304 KB |
Output is correct |
22 |
Correct |
126 ms |
8316 KB |
Output is correct |
23 |
Incorrect |
129 ms |
8324 KB |
Output isn't correct |
24 |
Halted |
0 ms |
0 KB |
- |