【题目描述】
For an array, we can build a Segment Tree for it, each node stores an extra attribute count to denote the number of elements in the the array which value is between interval start and end. (The array may not fully filled by elements)
Design a query method with three parameters root,start and end, find the number of elements in the in array's interval [start,end] by the given root of value Segment Tree.
Notice:It is much easier to understand this problem if you finished Segment Tree Build and Segment Tree Query first.
对于一个数组,我们可以对其建立一棵线段树, 每个结点存储一个额外的值count来代表这个结点所指代的数组区间内的元素个数. (数组中并不一定每个位置上都有元素)
实现一个query的方法,该方法接受三个参数root,start和end, 分别代表线段树的根节点和需要查询的区间,找到数组中在区间[start,end]内的元素个数。
【注】如果你完成了 Segment Tree Build 和 Segment Tree Query两道题,会更容易理解此题。
【题目链接】
www.lintcode.com/en/problem/segment-tree-query-ii/
【题目解析】
题目里的start end指的是数组的值的取值范围,count表示的是在这个取值范围之内有几个数字。
可以采用二分法解题。
如果root.start >= start && root.end <= end, 这就意味着这个root所包含的范围是我们要求解的一个范围的子范围,这个范围内的count值我们是要的,所以直接返回root。count
接下来进行二分。
mid = (start + end)/2;
如果mid 《start, 说明root节点的左半部分是不需要考虑的,因此调用 query(root.right, start, end);
如果 mid 》= end, 说明root节点的右侧的值全部比end要大,也不是我们需要考虑的范围,因此调用 query(root,left, start ,end)
最后,如果mid在start跟end之间,那么就需要分别统计 start~mid mid+1~ end范围的结果,然后加起来。
【参考答案】
www.jiuzhang.com/solutions/segment-tree-query-ii/
相关推荐
### Segment Tree Beats! —— 深入探索高级线段树应用 #### 一、引言 在计算机科学领域,特别是在算法设计与分析方面,**线段树**是一种非常重要的数据结构,它能够高效地支持区间查询和更新操作。本文档主要介绍...
### 线段树(Segment Tree)详解及实现 #### 引言 线段树(Segment Tree),作为数据结构中的一个重要组成部分,主要用于处理区间查询问题。它是一种高度平衡的二叉树,拥有静态结构,其节点对应不同的区间,并且...
本项目"Segment-Tree based Cost Aggregation for Stereo Matching code"是基于Segment-Tree实现的代价聚合算法的源代码。Segment-Tree在这里的主要作用是快速地对图像区域内的匹配代价进行累加和查询,以优化匹配...
标题 "CPP.zip_SPOJ-HOTELS.cpp_circular game spoj_cpp_segment tree_usac" 提到了几个关键元素,包括一个编程挑战(SPOJ-HOTELS)、特定的编程语言(C++)、一种算法(circular game)以及数据结构(segment tree...
Segment Tree Sliding Window Sort Stack String Tree Two Pointers Union Find 第三章 ⼀些模板 线段树 Segment Tree 并查集 UnionFind 第四章 Leetcode 题解 1. Two Sum 2. Add Two Numbers 3. Longest Substring ...
线段树(Segment Tree)作为高效处理区间查询和更新的数据结构,在实际问题解决中有着广泛的应用。本篇文章将详细解析线段树及其在面试中的相关应用。 线段树是一种二叉树形数据结构,用于高效地处理区间查询和区间...
在汇编语言的学习中,"STACK1_SEGMENT_STACK.rar_STACK1 SEGMENT_stack segment stack"这个标题提到了两个关键概念:栈段(Stack Segment)和栈(Stack)。栈在计算机科学中扮演着至关重要的角色,尤其是在汇编语言...
LCA 问题的解决方法有很多,例如使用 Sparse Table 算法、Segment Tree 算法等。这些算法的复杂度都可以达到 O(1) 或 O(logN),其中 N 是树的结点数。这些算法可以应用于各种实际问题中,例如在生物学计算中,LCA ...
一个线段树的ppt,里面主要讲了线段树,主席树,和树链剖分
标题:Segment Routing(段路由) 描述:比MPLS TE更好的技术 MPLS -SR PPT 标签:Segment Routing MPLS SR,MPLS TE 基于提供的文件内容,我们可以深入探讨Segment Routing(SR)这一概念,它被视为MPLS Traffic...
在命令行中运行`composer require spatie/laravel-segment`,这将把Segment的包添加到项目的依赖列表并下载相关文件。 2. **配置服务**:在`config/app.php`中注册服务提供者,将`Spatie\Segment\...
Segment Routing(SR)是一种先进的网络路由技术,旨在简化网络架构并增强网络的灵活性。它基于源路由的概念,允许网络管理员预先定义数据包的传输路径,从而实现精细化的流量工程和高效的网络资源利用。 SR的核心...
### Segment-tree Based Cost Aggregation for Stereo Matching with Enhanced Segmentation #### 摘要与背景介绍 本文介绍了一种基于段树(segment-tree,简称ST)的成本聚合算法,该算法旨在提高立体匹配(stereo ...
"Segment Anything"是Facebook AI团队开源的一个先进图像处理工具,主要专注于图像分割任务。这个工具的目的是为了帮助研究人员和开发者更高效地实现对图像中特定对象的精确识别和分离,从而进行深度学习模型的训练...
版权声明:本文为CSDN博主「Alex_McAvoy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 ...目录【概述】【基础操作实现】1.建树1)思路2)实现2.单点查询1)思路2)实现3....
Segment Routing 思科原厂培训PPT L3/L2 , Traffic Engineering (TE) / Fast Reroute (FRR) services are offered over the MPLS backbone Complex protocol stacks Complex troubleshooting & operation
pysegmenttree库正是Python实现Segment Tree的一个工具,它提供了方便的接口供用户在Python代码中使用Segment Tree。0.1.2是该库的一个版本号,通常随着新功能的添加、错误的修复以及性能的优化,库的版本会逐渐更新...
在Android开发中,"Segment"通常指的是视图组件或者布局管理方式的一种,它允许开发者将多个组件或视图组织在一个可滚动的容器中,类似Tab布局。本篇将深入探讨如何在Android中自定义Segment,并使其能正常运行。 ...
在EBML Tree中,可以看到Segment下包含的各种子元素,如“Cluster”、“TrackEntry”、“Info”等。 4. **时间线与Cluster**:“Cluster”元素是存储视频帧和音频帧的地方,每个Cluster对应着文件中的一个时间片段...