public void ElementAtTest()
        {
            var tree = new RandomizedBinarySearchTree <int>();

            Assert.Throws <ArgumentOutOfRangeException>(() => tree.ElementAt(-1));
            Assert.Throws <ArgumentOutOfRangeException>(() => tree.ElementAt(1));

            tree.Insert(0);
            tree.Insert(1);
            tree.Insert(-1);
            tree.Insert(2);
            tree.Insert(-1);

            Assert.That(tree.ElementAt(0), Is.EqualTo(-1));
            Assert.That(tree.ElementAt(1), Is.EqualTo(-1));
            Assert.That(tree.ElementAt(2), Is.EqualTo(0));
            Assert.That(tree.ElementAt(3), Is.EqualTo(1));
            Assert.That(tree.ElementAt(4), Is.EqualTo(2));

            Assert.That(tree.Remove(0), Is.True);
            Assert.That(tree.ElementAt(0), Is.EqualTo(-1));
            Assert.That(tree.ElementAt(1), Is.EqualTo(-1));
            Assert.That(tree.ElementAt(2), Is.EqualTo(1));
            Assert.That(tree.ElementAt(3), Is.EqualTo(2));

            Assert.That(tree.Remove(-1), Is.True);
            Assert.That(tree.ElementAt(0), Is.EqualTo(-1));
            Assert.That(tree.ElementAt(1), Is.EqualTo(1));
            Assert.That(tree.ElementAt(2), Is.EqualTo(2));
        }
Esempio n. 2
0
        public static void Solve()
        {
            var Q    = Scanner.Scan <int>();
            var asc  = new RandomizedBinarySearchTree <long>();
            var desc = new RandomizedBinarySearchTree <long>((x, y) => y.CompareTo(x));

            while (Q-- > 0)
            {
                var query = Scanner.ScanEnumerable <long>().ToArray();
                var(q, x) = (query[0], query[1]);
                if (q == 1)
                {
                    asc.Insert(x);
                    desc.Insert(x);
                }
                else
                {
                    var k   = (int)query[2] - 1;
                    var set = q == 2 ? desc : asc;
                    if (set.Count() == 0)
                    {
                        Console.WriteLine(-1);
                        continue;
                    }
                    var lb     = set.LowerBound(x);
                    var answer = lb + k < set.Count() ? set.ElementAt(lb + k) : -1;
                    Console.WriteLine(answer);
                }
            }
        }
        public void InsertTest()
        {
            var tree = new RandomizedBinarySearchTree <int>();

            tree.Insert(0);
            Assert.That(tree.Count, Is.EqualTo(1));
            tree.Insert(1);
            Assert.That(tree.Count, Is.EqualTo(2));
            tree.Insert(-1);
            Assert.That(tree.Count, Is.EqualTo(3));
        }
        public void ContainsTest()
        {
            var tree = new RandomizedBinarySearchTree <int>();

            tree.Insert(0);
            tree.Insert(1);
            tree.Insert(-1);
            tree.Insert(2);
            tree.Insert(-2);

            Assert.That(tree.Contains(0), Is.True);
            Assert.That(tree.Contains(-3), Is.False);
            Assert.That(tree.Contains(3), Is.False);
        }
        public void EnumerateTest()
        {
            var tree = new RandomizedBinarySearchTree <int>();

            tree.Insert(0);
            tree.Insert(1);
            tree.Insert(-1);
            tree.Insert(2);
            tree.Insert(-2);

            var expected = new[] { -2, -1, 0, 1, 2 };

            Assert.That(tree.ToArray(), Is.EqualTo(expected));
        }
        public void InitializeTest()
        {
            var tree = new RandomizedBinarySearchTree <int>();

            Assert.That(tree.Count, Is.EqualTo(0));

            tree = new RandomizedBinarySearchTree <int>(1);
            Assert.That(tree.Count, Is.EqualTo(0));

            tree = new RandomizedBinarySearchTree <int>(Comparer <int> .Default);
            Assert.That(tree.Count, Is.EqualTo(0));

            tree = new RandomizedBinarySearchTree <int>((Comparer <int> .Default.Compare));
            Assert.That(tree.Count, Is.EqualTo(0));
        }
        public void UpperBoundTest()
        {
            var tree = new RandomizedBinarySearchTree <int>();

            tree.Insert(0);
            tree.Insert(1);
            tree.Insert(-1);
            tree.Insert(2);
            tree.Insert(-2);

            Assert.That(tree.UpperBound(-3), Is.EqualTo(0));
            Assert.That(tree.UpperBound(-2), Is.EqualTo(1));
            Assert.That(tree.UpperBound(-1), Is.EqualTo(2));
            Assert.That(tree.UpperBound(0), Is.EqualTo(3));
            Assert.That(tree.UpperBound(1), Is.EqualTo(4));
            Assert.That(tree.UpperBound(2), Is.EqualTo(5));
            Assert.That(tree.UpperBound(3), Is.EqualTo(5));
        }
        public void RemoveTest()
        {
            var tree = new RandomizedBinarySearchTree <int>();

            tree.Insert(1);
            Assert.That(tree.Count, Is.EqualTo(1));

            Assert.That(tree.Remove(1), Is.True);
            Assert.That(tree.Count, Is.EqualTo(0));

            Assert.That(tree.Remove(0), Is.False);
            Assert.That(tree.Remove(1), Is.False);

            tree.Insert(1);
            tree.Insert(1);
            Assert.That(tree.Count, Is.EqualTo(2));

            Assert.That(tree.Remove(1), Is.True);
            Assert.That(tree.Count, Is.EqualTo(1));
        }
Esempio n. 9
0
        public static void Solve()
        {
            var(N, M) = Scanner.Scan <int, int>();
            var A = Scanner.ScanEnumerable <int>().ToArray();
            var B = Scanner.ScanEnumerable <int>().ToArray();
            var C = Scanner.ScanEnumerable <int>().ToArray();
            var D = Scanner.ScanEnumerable <int>().ToArray();

            var chocos = A.Zip(B).Select(x => new Element(0, x.First, x.Second));
            var cases  = C.Zip(D).Select(x => new Element(1, x.First, x.Second));
            var list   = chocos.Concat(cases).ToList();

            list.Sort((x, y) =>
            {
                var result = y.H.CompareTo(x.H);
                return(result != 0 ? result : y.Type.CompareTo(x.Type));
            });

            var set = new RandomizedBinarySearchTree <int>();

            foreach (var e in list)
            {
                if (e.Type == 0)
                {
                    var lb = set.LowerBound(e.W);
                    if (lb < 0 || set.Count <= lb)
                    {
                        Console.WriteLine("No");
                        return;
                    }

                    set.RemoveAt(lb);
                }
                else
                {
                    set.Insert(e.W);
                }
            }

            Console.WriteLine("Yes");
        }