segment-tree相关内容

段树 2 * 2 ^(ceil(log(n))) - 1 数组的内存如何?

链接:http://www.geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/.这是引用的文本: 我们从一个段 arr[0 开始...n-1].并且每次我们将当前段分成两半(如果它还没有变成长度为1的段),然后在两半上调用相同的过程,对于每个这样的段,我们将总和存储在相应的节点中.除最后一层外,将填充构建的线段树的所有层.此外,这 ..
发布时间:2022-01-05 19:04:11 其他开发

段树、区间树、二叉索引树和范围树有什么区别?

段树、区间树、二叉索引树和范围树的区别在于: 关键思想/定义 应用程序 更高维度的性能/订单/空间消耗 请不要只给出定义. 解决方案 所有这些数据结构都用于解决不同的问题: 段树存储区间,并针对“这些区间中的哪些区间包含给定点"查询进行了优化. 区间树也存储区间,但针对“这些区间中的哪些区间与给定区间重叠"查询进行了优化.它也可以用于点查询——类似于线段树. 范围 ..

是否可以在 O(lg N) 范围内查询不同整数的数量?

我已经阅读了一些关于两种常见数据结构的教程,它们可以在 O(lg N) 中实现范围更新和查询:段树 和二元索引树(BIT/Fenwick Tree). 我发现的大多数示例都是关于一些关联和交换操作,例如“范围内的整数总和"、“范围内的整数异或"等. 不知道这两种数据结构(或任何其他数据结构/算法,请提出)是否可以在O(lg N)中实现以下查询?(如果不是,O(sqrt N) 怎么样) ..
发布时间:2021-12-22 08:30:56 其他开发

"x += x &" 是什么意思?(-x)"意思?

我发现很多人使用 x += x &(-x), x -= x &(-x) 解决区间树问题(同时实现段树、二叉索引树等数据结构) 你能解释一下这个等式是什么意思吗? 例如: void update(int m, int x) {米++;而 (m 0) {结果 = 结果 + t[m];m -= m &-m;}返回结果;} 解决方案 注意:这个答案(就像方法本身一样)假设有符号整数 ..

N个矩形的并集周长

我想知道解决此问题的有效方法: 给出给定左上角和右下角的N个矩形,请找到N个矩形的并集周长. 我只有O(N^2)算法,而且速度太慢,因此请找到更有效的算法. 您可以假设坐标值为正整数且小于100000. 编辑: 例如,在这种情况下,周长为30. 一种O(n ^ 2)算法: for x=0 to maxx for i=0 to N if lowx ..
发布时间:2020-08-22 20:39:16 其他开发

如何有效地回答整数数组中的范围查询?

如何有效地对整数数组进行查询和定范围? 查询仅是一种类型,即在给定范围[a,b]的情况下,找到less than x的sum of elements(此处x是每个查询的一部分,例如形式a b x). 最初,我试图从字面上看从a到b并检查当前元素是否小于x并相加.但是,由于复杂度为O(n),所以这种方法效率很低. 现在,我正在尝试使用段树并在合并时对数字进行排序.但是现在我的挑战是 ..
发布时间:2020-07-06 18:54:16 其他开发

段树-查询复杂度

我在理解段树复杂性方面遇到问题.显然,如果您具有仅需更改一个节点的更新功能,则其复杂度将为log(n). 但是我不知道为什么查询(a,b)的复杂度是log(n),其中(a,b)是需要检查的间隔. 谁能为我提供直观/正式的证明来理解这一点? 解决方案 查询间隔(x,y)有四种情况 FIND(R,x,y) //R is the node % Case 1 if R.first = ..
发布时间:2020-07-06 18:54:15 其他开发

更新细分树中的一项

我要解决的问题的一部分涉及获得数组范围(RMQ)的最小值,因此我实现了一个细分树,到目前为止效果很好。然后,我想更新原始数组中的一项(没有多于一项的更新)并在细分树中进行更新。到目前为止,我所做的是从上到下遍历段树,直到到达叶子为止,但这似乎有一些错误。这是代码的更新部分,那里似乎有什么问题? P.S. n不是2的倍数(我不知道这是否会影响解决方案) public void upda ..
发布时间:2020-06-03 21:53:51 C#/.NET

动态数组时范围最小查询

我有一个数组,说大小为1的A(0索引)。 我想在数组A中找到索引k1(k1> = 0)与最小值之间的最小值A.size()-1(即最后一个元素)。 然后我将在数组的末尾插入值:(给定范围内的最小元素+一些“随机”常数)。然后,我有另一个查询来查找最小值在索引k2和A.size()-1之间。我发现,在末尾插入值:(最小值在给定范围内+另一个“随机”常量)。我必须做很多这样的查询。 ..
发布时间:2020-06-03 21:03:40 其他开发

是否可以查询O(lg N)范围内不同整数的数量?

我已经通读了一些有关两个常见数据结构的教程,可以在O(lg N)中实现范围更新和查询:细分树和二元索引树(BIT /分域树)。 / p> 我发现的大多数示例都是关于一些关联和交换运算的,例如“范围内的整数之和”,“范围内的XOR整数”等。 我想知道这两个数据结构(或任何其他数据结构/算法,请提出)是否可以在O(lg N)中实现以下查询? (如果否,那么O(sqrt N)怎么样) ..
发布时间:2020-06-03 20:34:18 其他开发

优化sum(i,j)和update(i,value)以获取整数

给出大量整数,优化函数sum(i,j)和update(i,value),以使两个函数的取值都小于O(n). 更新 这是一个面试问题.我试过O(n)sum(i,j)和O(1)update(i,value).其他解决方案是将输入数组预处理为二维数组,以得出sum(i,j)的O(1)答案.但这使O(n)的更新函数成为可能. 例如,给定一个数组: A[] = {4,5,4,3,6, ..
发布时间:2020-05-21 21:13:53 其他开发

四叉树O(N)的最坏情况如何复杂?

从源头上我读到,当2D矩阵只有一个维度时,我发现 四分之一树的最差情况复杂度是O(N)。我不明白这个原因。 例如当矩阵只有1mm时,我们会把它分成两半,并以log(m)的方式到达单元格。复杂度应该是log(m) THANKS 解决方案 有几种构建四叉树的方法。如果你采取一个像素矩阵,或任何单位,并做出一个四叉树,那么它的高度将是log(n)。 但是,如果你使用它存储一个接一个地 ..

分段树2 * 2 ^(ceil(log(n))) - 1的数组的内存如何?

链接: http:// www。 geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/ 。这是引用的文本: 我们从段arr开始[0。 。 。 n-1]。并且每次将当前段划分成两半(如果还没有成为长度为1的段),然后在两半上调用相同的过程,并且对于每个这样的段,我们将和存储在对应的节点中。构建的段树的所有级别将被完全填满,除了最后一级 ..
发布时间:2017-04-03 13:40:08 其他开发

乘法的范围

我有一个数组10个号码supprse A [10] = {1,2,3,4,5,6,7,8,9,10} 我必须计算数字在特定范围内的乘法,但没有得到正确的答案,我使用的段树和不知道如何使用查询操作 这是我的code: #包括< stdio.h中> #定义米10亿 #定义MAX 100010 的typedef无符号长长ULL; ULL一个[MAX] ULL树[4 * MAX]。 无效 ..
发布时间:2015-11-30 22:08:44 C/C++

用段树查找给定数组中最大的一笔子阵

我想找到从给定数组中最大的一笔连续的子阵。我知道发现使用动态规划的使用Kadane算法的概念,最大的一笔连续的子阵方法的O(n)的方法。 但是,这需要大量的时间,如果没有一系列的问题都非常大。有没有办法用段树,因为它是pferred回答它解决了O(日志(n))的时间段查询的最佳选择$ P $来解决它。 谢谢你。 解决方案 据我的意见,以贾斯汀的回答,您可以增加一个标准的线段树,实现了 O(日 ..
发布时间:2015-11-30 20:43:52 C/C++

段树java实现

你知道一个很好的实施(二)段树在Java中的? 解决方案 这是开源的布局管理软件包项目 下面是一个您可能会发现在code有用。我既没有证实也不运行它,我无法找到code从快速搜索的code和网页买者自负根据提供的许可证。 您可能能够与作者联系,但最后一项活动似乎是2008年8月。 ..
发布时间:2015-11-30 16:18:43 Java开发

在二维矩阵范围更新和查询

我没有一个方案,但在这里不用的问题。这是一个只是让我疯了。有一个n阶布尔矩阵最初所有元素都是0,N< = 10 ^ 6和作为输入。 下一步将有高达10 ^ 5的查询。每个查询,可以任一组列的所有元素c键0或1,或者设置行r的所有元素为0或1可以有另一种类型的查询,印刷在c列或行r 1的总数。 我不知道如何解决这个问题的任何帮助将是AP preciated。显然,每个查询一个O(n)的解决方 ..
发布时间:2015-11-30 16:08:41 C/C++

在段树元素旋转

由于数组的 A 的用的 N 的数字(所有正面和含有少于 或等于4位), 2 的类型的查询都被支持。那里 是总共M个查询。 更新通过指数给出了一系列的 L,R 的(包括两端)通过的 K 的 返回由给定范围内的最大元素的 L,R 的(包括两端)。 更新了许多的 K 的时间意味着旋转数的 K 的时间。 有关如1234旋转到2341 905旋转到059和059旋转到590。 注意的:059和59 ..
发布时间:2015-11-30 15:44:25 C/C++