#segment #interval #query #sum #fenwick

segment-tree

快速执行区间查询或修改

3 个稳定版本

2.0.0 2018 年 12 月 28 日
1.1.0 2017 年 8 月 26 日
1.0.0 2017 年 8 月 26 日

#865数据结构

Download history 125/week @ 2024-03-24 173/week @ 2024-03-31 92/week @ 2024-04-07 118/week @ 2024-04-14 145/week @ 2024-04-21 65/week @ 2024-04-28 88/week @ 2024-05-05 91/week @ 2024-05-12 184/week @ 2024-05-19 69/week @ 2024-05-26 72/week @ 2024-06-02 51/week @ 2024-06-09 143/week @ 2024-06-16 144/week @ 2024-06-23 104/week @ 2024-06-30 120/week @ 2024-07-07

513 每月下载量
8 个包中使用了(直接使用 2 个)

MIT 许可证

72KB
1.5K SLoC

segment-tree

此包包含各种数据结构,可用于快速在某些数组中执行区间查询或修改。

此包中的数据结构都是树。树使用数组表示,以实现高性能和低内存使用。尽管包名为线段树,但此包中并非所有树都是线段树。

Cargo.toml

[dependencies]
segment-tree = "2"

示例

以下示例显示了一个线段树,它允许以对数时间查询任何区间。

use segment_tree::SegmentPoint;
use segment_tree::ops::Min;

let array = vec![4, 3, 2, 1, 2, 3, 4];
let mut tree = SegmentPoint::build(array, Min);

// Compute the minimum of the whole array.
assert_eq!(tree.query(0, tree.len()), 1);

// Compute the minimum of part of the array.
assert_eq!(tree.query(0, 3), 2);

// Change the 1 into a 10.
tree.modify(3, 10);

// The minimum of the whole array is now 2.
assert_eq!(tree.query(0, tree.len()), 2);

此包还有一个 PointSegment 类型,它允许修改区间。

相关的包 prefix_sum 也可能很有趣。

依赖关系

~105KB