static object Solve() { var n = int.Parse(Console.ReadLine()); var a = Read(); var b = Read(); var gs = Enumerable.Range(0, n) .Select(i => (a: a[i], b: b[i])) .GroupBy(p => p) .OrderBy(g => g.Key.a) .ThenBy(g => - g.Key.b) .ToArray(); var r = 0L; var set = new WBMultiSet <int>(); foreach (var g in gs) { var v = g.Key.b; var c = g.LongCount(); r += c * set.GetCount(x => x >= v, x => true); r += c * c; while (c-- > 0) { set.Add(v); } } return(r); }
static object Solve() { var n = int.Parse(Console.ReadLine()); var a = Read(); var b = Read(); var indexes = Enumerable.Range(0, n) .OrderBy(i => a[i]) .ThenBy(i => - b[i]) .ToArray(); var r = 0L; var set = new WBMultiSet <int>(); foreach (var i in indexes) { set.Add(b[i]); r += set.GetCount(x => x >= b[i], x => true); } foreach (var g in indexes.Select(i => (a[i], b[i])).GroupBy(p => p)) { var c = g.LongCount(); r += c * (c - 1) / 2; } return(r); }
static object Solve() { var n = int.Parse(Console.ReadLine()); var a = ReadL(); var set = new WBMultiSet <long>(); var c = 0; foreach (var v in a) { var x = v; while ((x & 1) == 0) { x >>= 1; c++; } set.Add(x); } while (c > 0 && 3 * set.GetFirst() <= set.GetLast()) { c--; var x = set.GetFirst(); set.RemoveAt(0); set.Add(x * 3); } a = set.ToArray(); var r = a[c % n]; c /= n; while (c-- > 0) { r *= 3; } return(r); }