static void Main() { var qc = int.Parse(Console.ReadLine()); var qs = Array.ConvertAll(new bool[qc], _ => Read2()); var l = new AvlList <int>(); Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); foreach (var(t, x) in qs) { if (t == 1) { l.Prepend(x); } else if (t == 2) { l.Add(x); } else { Console.WriteLine(l[x - 1]); } } Console.Out.Flush(); }
static void Main() { var(n, qc) = Read2(); var a = Read(); var qs = Array.ConvertAll(new bool[qc], _ => Read3()); var l = new AvlList <int>(); foreach (var x in a) { l.Add(x); } Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); foreach (var(t, x, y) in qs) { if (t == 1) { // Node を操作することで高速化できます。 (l[x - 1], l[y - 1]) = (l[y - 1], l[x - 1]); } else if (t == 2) { l.Prepend(l.RemoveAt(n - 1)); } else { Console.WriteLine(l[x - 1]); } } Console.Out.Flush(); }
static void Main() { var n = int.Parse(Console.ReadLine()); var s = Console.ReadLine(); var l = new AvlList <int>(); Console.SetOut(new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }); for (int i = 0; i < n; i++) { var c = s[i]; if (c == 'L') { l.Prepend(i + 1); } else if (c == 'R') { l.Add(i + 1); } else if (c < 'D') { var k = c - 'A'; if (k < l.Count) { Console.WriteLine(l.RemoveAt(k)); } else { Console.WriteLine("ERROR"); } } else { var k = c - 'D'; if (k < l.Count) { Console.WriteLine(l.RemoveAt(l.Count - 1 - k)); } else { Console.WriteLine("ERROR"); } } } Console.Out.Flush(); }
public static void Run() { var n = 250000; List <int> list = null; AvlList <int> avlList = null; var watch = new Stopwatch(); var random = new Random(); _test(() => list = Enumerable.Range(1, n).ToList(), watch, "Creating list"); _test(() => avlList = Enumerable.Range(1, n).ToAvlList(), watch, "Creating AVL List"); _test(() => { for (int i = 0; i < n; i++) { var index = list.IndexOf(i); } }, watch, $"Finding index of {n} items in list"); _test(() => { for (int i = 0; i < n; i++) { var index = avlList.IndexOf(i); } }, watch, $"Finding index of {n} items in avl"); _test(() => { for (int i = 0; i < n; i++) { var r = random.Next(n); list.Remove(r); list.Insert(r, random.Next(n - 1)); } }, watch, "Moving in list"); _test(() => { for (int i = 0; i < n; i++) { var r = random.Next(n); avlList.Remove(r); avlList.Insert(r, random.Next(n - 1)); } }, watch, "Moving in AvlList"); }