专栏文章
李超线段树(+合并)
算法·理论参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipk6nqo
- 此快照首次捕获于
- 2025/12/03 13:20 3 个月前
- 此快照最后确认于
- 2025/12/03 13:20 3 个月前
CPP
struct node {
int l, r; LL k, b;
} z[N*20];
void modify(int &p, int l, int r, LL k, LL b) {
if (!p) {
p = ++idx, z[p] = {0, 0, k, b};
return;
}
int mid = (l+r)>>1;
if (z[p].k*mid+z[p].b > k*mid+b) {
swap(z[p].k, k), swap(z[p].b, b);
}
if (l == r) return;
if (k > z[p].k) modify(z[p].l, l, mid, k, b);
else if (k < z[p].k) modify(z[p].r, mid+1, r, k, b);
}
LL query(int p, int l, int r, int x) {
if (!p) return 1e18;
int mid = (l+r)>>1;
LL res = z[p].k*x+z[p].b;
if (x <= mid) res = min(res, query(z[p].l, l, mid, x));
else res = min(res, query(z[p].r, mid+1, r, x));
return res;
}
void merge(int &p, int q, int l, int r) {
if (!p || !q) {
p |= q; return;
}
int mid = (l+r)>>1;
merge(z[p].l, z[q].l, l, mid);
merge(z[p].r, z[q].r, mid+1, r);
modify(p, l, r, z[q].k, z[q].b);
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...