一、题目
二、解法
在若干次操作后,某一个位置的值可以表示成若干各区间的最大值。
例如位置 ,我们找到当前操作前最后一个(编号最大但小于当前编号)覆盖当前区间左端点的操作的左端点,最后一个覆盖当前当前区间右端点的操作的右端点,把这个左右端点当成一个新的操作区间,然后重复执行上述操作。
也就是我们需要一直向左找,一直向右找,找到最左的和最右的 , 位置上面的即是 这个区间中的最大值。
我们可以把上述操作建成图,分别建成左树和右树,把操作区间当作节点,左树的父节点即为最后覆盖当前操作区间左端点的操作区间,右树同理,我们可以在这颗树上倍增,就可以快速找到 和 。
具体来说,我们按顺序扫描操作区间,维护一颗线段树,区间修改,单点查询即可。
建出这两棵树之后,查询和修改就不成问题了,用线段树维护区间最小值,查询即可,时间复杂度 。
咕咕咕