SimpleSeg

SegTree

T型の配列aについて、opTT(al..r)が高速に計算できる。 opTTは結合率を満たす2引数関数, eTは単位元。

alias SimpleSeg(T, alias opTT, T eT, alias Engine = SimpleSegEngine) = SegTree!(Engine, T, binaryFun!opTT, eT)

Examples

import std.algorithm : max;
///int型でmax(...)が計算できる、つまりRMQ
auto seg = SimpleSeg!(int, (a, b) => max(a, b), 0)(3);

//[2, 1, 4]
seg[0] = 2; seg[1] = 1; seg[2] = 4;
assert(seg[0..3].sum == 4); //max(2, 1, 4) == 4

//[2, 1, 5]
seg[2] = 5;
assert(seg[0..2].sum == 2); //max(2, 1) == 2
assert(seg[0..3].sum == 5); //max(2, 1, 5) == 5

//[2, 11, 5]
seg[1] = seg[1] + 10;
assert(seg[0..3].sum == 11);

Meta