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