예제 #1
0
    static void Main()
    {
        SourceExpander.Expander.Expand();

        // https://atcoder.jp/contests/practice2/tasks/practice2_j
        var line = Console.ReadLine().Split(' ');
        var N    = int.Parse(line[0]);
        var Q    = int.Parse(line[1]);
        var seg  = new Segtree <long, Op>(Console.ReadLine().Split(' ').Select(long.Parse).ToArray());

        for (int q = 0; q < Q; q++)
        {
            line = Console.ReadLine().Split(' ');
            int t = int.Parse(line[0]);
            int l = int.Parse(line[1]) - 1;
            int r = int.Parse(line[2]);
            switch (t)
            {
            case 1:
                seg[l] = r;
                break;

            case 2:
                Console.WriteLine(seg.Prod(l, r));
                break;

            case 3:
                Console.WriteLine(1 + seg.MaxRight(l, num => num < r));
                break;
            }
        }
    }