public override void Solve(IOManager io) { var n = io.ReadInt(); var queries = io.ReadInt(); var a = new SumModInt[n]; for (int i = 0; i < a.Length; i++) { a[i] = new SumModInt(ModInt.Raw(io.ReadInt()), 1); } var segtree = new LazySegmentTree <SumModInt, AffineActor>(a); for (int q = 0; q < queries; q++) { var kind = io.ReadInt(); var l = io.ReadInt(); var r = io.ReadInt(); if (kind == 0) { var b = ModInt.Raw(io.ReadInt()); var c = ModInt.Raw(io.ReadInt()); segtree.Apply(l..r, new AffineActor(b, c)); } else { io.WriteLine(segtree.Query(l..r).Value); } } }
public SumModInt Merge(SumModInt other) => new SumModInt(Value + other.Value, Length + other.Length);