Skip to content

Commit d9a7990

Browse files
committed
Add needed optimization to Li-Chao
1 parent e0898f9 commit d9a7990

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

li_chao.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,13 @@ void add_line(pll ln, int lo=0, int hi=MAXLC, int node=0) {
2727
int mid = (lo + hi) / 2;
2828
bool l = f(ln, lo) < f(line[node], lo);
2929
bool m = f(ln, mid) < f(line[node], mid);
30+
bool h = f(ln, hi) < f(line[node], hi);
3031
if (m) swap(line[node], ln);
3132
if (lo == hi || ln.second == INF)
3233
return;
3334
else if (l != m)
3435
add_line(ln, lo, mid - 1, 2 * node + 1);
35-
else
36+
else if (h != m)
3637
add_line(ln, mid + 1, hi, 2 * node + 2);
3738
}
3839

li_chao_dynamic.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct lc_node {
2323
int mid = (lo + hi) / 2;
2424
bool bl = f(nm, nb, lo) < f(m, b, lo);
2525
bool bm = f(nm, nb, mid) < f(m, b, mid);
26+
bool bh = f(nm, nb, hi) < f(m, b, hi);
2627
if (bm) {
2728
swap(nm, m);
2829
swap(nb, b);
@@ -33,7 +34,7 @@ struct lc_node {
3334
if (!l) l = new lc_node;
3435
l->add_line(nm, nb, lo, mid - 1);
3536
}
36-
else {
37+
else if (bh != bm) {
3738
if (!r) r = new lc_node;
3839
r->add_line(nm, nb, mid + 1, hi);
3940
}

0 commit comments

Comments
 (0)