李超线段树
[HEOI2013]Segment
不厚道得借鉴一些\(OI\;Wiki\)的好东西
此题, 大概就是模板题了
其实, 如果按照常规思路, 想到的东西大概也是一样的
和线段树一样, 我们需要维护\(X\)轴上的信息
就是说, 我们只需要记录对于每一个\(X\), 它对应的答案是啥
对答案没有贡献的线段, 相当于就被丢弃了
所以此时的线段树中的值, 就是唯一的比较的对象了
思路
情况一:
那么如果这个区间没有被覆盖, 可以直接标记为最值
情况二:
如果这个被覆盖了, 那么又要分三种情况
我们另绿色为新加入的点
(1)\(New.k>T_X.k\)
- 1.中值可以被更新

我们看见, 此时新的线段可以更新到\(mid\)的位置, 它也可以继续更新\(mid+1\)到\(r\)的位置, 但是\(l\)到\(mid\)的部分, 就不一定可以更新了, 但是我们可以看见, 它仍有一部分是可以更新的
2.中值无法更新

那么对于这种情况, 我们就不需要更新\(l\)到\(mid\)的值了, 但是我们也有可能更新\(mid+1\)到\(r\)
(2)\(New.k<T_X.k\)


同理分析即可
(3)斜率相等
显然是要截距大的啊, 是吧
时间复杂度分析
插入
这个操作将长度为\(n\)的线段, 分成了\(\log n\)段去更新, 复杂度为\(O(\log n)\)
对于每一个\(O(\log n)\)的区间, 我们有花费\(O(\log n)\)的时间往下更新
故插入的时间复杂度大约为\(O(\log^2n)\)
查询
就得到包含\(x\)的所有区间的中值
那么这样的区间有多少呢?
口胡开始了, 假设这个点为\(P\), 他左边有\(X\)个节点, 那么右边就有\(N-X-1\)个节点, 那么左端点的个数就有\(X\)个, 右端点就有\(N-X-1\)个
乘法原理, 求和算期望, 就可以了
!#%!\(%!@:%>!"\)%!@#%!@$!“@>%3!@#>%#>:>”1”
\(Fake\)了啊
这棵树一共就才多少节点, 一共就只有多少层 ?
\(\log n\)?
差不多, \(\log n\)跑一次就可以出答案了
快乐水过了
1 |
|