Tree 如何在每次运算中在数组的起始处添加元素,并计算任意给定范围的和。?

Tree 如何在每次运算中在数组的起始处添加元素,并计算任意给定范围的和。?,tree,adhoc,segment,Tree,Adhoc,Segment,最初会给您一个N整数数组(1对于这种类型的问题,您可以使用称为TREAP(随机二叉搜索树)的数据结构。 有关treap的更多信息,请访问以下链接--cs.cornell.edu/Courses/cs312/2003sp/touchts/lec26.html尝试以下脱机算法:- 首先读取数组a 然后读入所有查询并存储它们,并计算类型2查询的数量,设为K 现在创建一个长度为K+长度为(a)的新数组b 现在从b中的索引1开始,向后遍历查询,对于每个类型2查询,将其元素添加到数组b中 现在在数组b上构建

最初会给您一个
N
整数数组
(1对于这种类型的问题,您可以使用称为TREAP(随机二叉搜索树)的数据结构。

有关treap的更多信息,请访问以下链接--cs.cornell.edu/Courses/cs312/2003sp/touchts/lec26.html

尝试以下脱机算法:-

首先读取数组a

然后读入所有查询并存储它们,并计算类型2查询的数量,设为K

现在创建一个长度为K+长度为(a)的新数组b

现在从b中的索引1开始,向后遍历查询,对于每个类型2查询,将其元素添加到数组b中

现在在数组b上构建一个段树或二元索引树

使用变量c计算到目前为止遇到的类型2查询的数量,并将其初始化为0

然后遍历查询列表,对于每个类型为2的查询,只需将c增加1

对于在数组a中具有范围l…r的类型1的查询,其在数组b中的范围将对应于(l+k-c)…(r+k-c)

因此,使用上面构建的段树或二元索引树来回答转换范围上的查询。 我希望这是有帮助的

(i) Operation 1 : Op1( l, r )
(ii) Operation 2 : Op2( x )