时空旅行

复习斜率优化。

原题公式$min((x-x_i)^2+c_i)$拆开括号得$min(-2*x*x_i+x_i^2+c_i)+x^2$

是个斜率优化的标准形式。

题目中建出操作树后一个星球会影响到它的子树。所以可以使用线段树

(其实所有和区间相关的问题都可以使用线段树)

线段树上的每一个节点上存储插到它的直线。然后使用半平面交。

每次查询就是查询一路上的节点,挪动指针即可做到时间复杂度O(nlog_2n)

排序直接做是O(nlog^2n)的,但是可以先把所有直线排序,然后把所有要排序的直线挂在对应位置。最后遍历排序后的序列,在线段树的节点的直线数组上push_back即可。

这样子可以去掉排序的log。

原文地址:https://www.cnblogs.com/cszmc2004/p/13023223.html