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