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)); }
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)); }
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"); }