示例#1
0
        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);
                }
            }
        }
示例#2
0
 public SumModInt Merge(SumModInt other) => new SumModInt(Value + other.Value, Length + other.Length);