【COCI 2012】Tax

题目大意

维护一个长度为 n 的序列,每个元素是一条直线,要求实现:

  • x 位置上改成一条新的直线
  • 询问 [l,r) 上的所有直线与 x=a 这条直线交点中最高一个的纵坐标

其中共 Q 个询问,询问的 a 递增
n<=105,Q<=3×105

分析

这道题我想到了用线段树套CDQ分治时间复杂度是 O(nlog2n) 的。
然而这远古时期的题目,空间卡得比较死。
题解给的是一个分块算法,比较好写,空间很小。

对于 1 操作我们直接暴力重建这个块。
对于操作 2 直接询问就可以了。

注意的地方

要求单次修改 O(m) 地维护一个长度为 m 的有序表。
用乘法代替除法来提速以及避免斜率不存在的情况。

你可能感兴趣的:(【COCI 2012】Tax)