Ejemplo n.º 1
0
    static void Main()
    {
        var(l, qc) = Read2();

        var set = new AvlSortedSet <int>();

        set.Add(0);
        set.Add(l);

        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        while (qc-- > 0)
        {
            var query = Read();
            var x     = query[1];

            if (query[0] == 1)
            {
                set.Add(x);
            }
            else
            {
                var n2 = set.Root.SearchFirstNode(v => v > x);
                var n1 = n2.SearchPreviousNode();
                Console.WriteLine(n2.Key - n1.Key);
            }
        }
        Console.Out.Flush();
    }
Ejemplo n.º 2
0
    static void Main()
    {
        var(n, qc) = Read2();
        var a  = Read();
        var qs = Array.ConvertAll(new bool[qc], _ => Read3());

        // a の値となりうるインデックスのセット
        var map = new Dictionary <int, AvlSortedSet <int> >();

        void AddPair(int i, int v)
        {
            if (!map.ContainsKey(v))
            {
                map[v] = new AvlSortedSet <int>();
            }
            map[v].Add(i);
        }

        for (int i = 0; i < n; i++)
        {
            AddPair(i, a[i]);
        }
        foreach (var(t, x, y) in qs)
        {
            if (t == 1)
            {
                AddPair(x - 1, y);
            }
        }

        var st = new ST1 <int>(n, Math.Min, int.MaxValue, a);

        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        foreach (var q in qs)
        {
            var(t, x, y) = q;
            x--;

            if (t == 1)
            {
                a[x] = y;
                st.Set(x, y);
            }
            else
            {
                var p = st.Get(x, y);

                var r = map[p].GetItems(v => v >= x, v => v < y).Where(i => a[i] == p).Select(i => i + 1).ToArray();
                Console.WriteLine($"{r.Length} " + string.Join(" ", r));
            }
        }
        Console.Out.Flush();
    }