#nullable enable #region var _input = Array.Empty(); var _iter = 0; string String() { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0); return _input[_iter++]; } T I() where T : IParsable => T.Parse(String(), null); #endregion static T[] Range(int n, Func F) => Enumerable.Range(0, n).Select(_ => F()).ToArray(); var n = I(); var hz = Range(n, I); Array.Sort(hz); var l = Math.Min(61, n); hz = hz[..l]; var ans = int.MaxValue; for (var i = 60; i >= 0; i--) { var q = new PriorityQueue(); foreach (var h in hz) q.Enqueue(h, -h); for (var j = i; j >= 0; j--) { if (q.Count == 0) break; var h = q.Dequeue(); h -= 1L << j; if (h > 0) q.Enqueue(h, -h); } if (n > l) { ans = n - l + i + 1 + q.Count; break; } if (q.Count == 0) ans = Math.Min(ans, i + 1); } Console.WriteLine(ans);