public void Bst()
        {
            var n        = 100000;
            var a        = RandomHelper.CreateData(n);
            var expected = (int[])a.Clone();

            var actual = new List <int>();
            var q      = new BstPriorityQueue <int>();

            foreach (var x in a)
            {
                q.Push(x);
            }
            while (q.Count > 0)
            {
                actual.Add(q.Pop());
            }

            Array.Sort(expected);
            CollectionAssert.AreEqual(expected, actual);

            actual.Clear();
            q = new BstPriorityQueue <int>(ComparerHelper <int> .Create(true));
            foreach (var x in a)
            {
                q.Push(x);
            }
            while (q.Count > 0)
            {
                actual.Add(q.Pop());
            }

            Array.Reverse(expected);
            CollectionAssert.AreEqual(expected, actual);
        }
示例#2
0
    static void Main()
    {
        var qc = int.Parse(Console.ReadLine());

        var pq = new BstPriorityQueue <long>();
        var d  = 0L;

        Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput())
        {
            AutoFlush = false
        });
        while (qc-- > 0)
        {
            var q = Read();
            if (q[0] == 1)
            {
                pq.Push(q[1] - d);
            }
            else if (q[0] == 2)
            {
                d += q[1];
            }
            else
            {
                Console.WriteLine(pq.Pop() + d);
            }
        }
        Console.Out.Flush();
    }