array_range_query
A high-performance, generic implementation of segment trees and lazy segment trees in Rust for efficient range queries and range updates.
Features
- Segment Tree: O(log n) point updates and range queries for any associative operation
- Lazy Segment Tree: O(log n) range updates and range queries with lazy propagation
- Generic Design: Type-safe specifications for custom operations
- Helper Types: Pre-built implementations for sum, min, max operations
- Zero-cost Abstractions: No runtime overhead from generics
Installation
Quick Start
Basic Segment Tree
use SegTreeSum;
let values = vec!;
let mut tree = from_vec;
assert_eq!; // Sum of [2, 3, 4]
tree.update; // Change index 2 to 10
assert_eq!; // Total sum: 1+2+10+4+5
Lazy Segment Tree
use LazySegTreeAddSum;
let values = vec!;
let mut tree = from_vec;
assert_eq!; // Sum of [2, 3, 4]
tree.update; // Add 10 to range [1, 4)
assert_eq!; // New total: 1+12+13+14+5
Helper Types
Regular Segment Trees
SegTreeSum<T>
— Range sum queriesSegTreeMin<T>
— Range minimum queriesSegTreeMax<T>
— Range maximum queries
Lazy Segment Trees
LazySegTreeAddSum<T>
— Range add updates, sum queriesLazySegTreeAddMin<T>
— Range add updates, min queriesLazySegTreeAddMax<T>
— Range add updates, max queriesLazySegTreeReplaceSum<T>
— Range assignment updates, sum queries
Custom Operations
Define your own operations by implementing the specification traits:
use ;
;
let tree = from_vec;
assert_eq!; // Maximum element
For lazy segment trees:
use ;
;
let mut tree = from_vec;
tree.update; // Add 10 to range [1, 4)
assert_eq!;
API Reference
SegTree
new(size)
/from_slice(values)
/from_vec(values)
— Constructionquery(range)
— Range query in O(log n)update(index, value)
— Point update in O(log n)
LazySegTree
new(size)
/from_slice(values)
/from_vec(values)
— Constructionquery(range)
— Range query in O(log n)update(range, value)
— Range update in O(log n)
Range Types
All query
and update
methods accept any range type:
2..5
(half-open)2..=4
(inclusive)..3
(from start)2..
(to end)..
(entire range)
Performance
- Construction: O(n)
- Point update: O(log n)
- Range query: O(log n)
- Range update (lazy): O(log n)
- Space: O(n)
Requirements
- Rust 2021 edition
- Dependencies (for helpers):
num-traits
,min_max_traits
License
MIT License. See LICENSE for details.