Bessie 正在尝试使用她自己的排序算法对一个整数数组进行排序。她有一堆共 N(1≤N≤2⋅105)个整数 a1,a2,…,aN(1≤ai≤1011),她将会按排序顺序将这些数放入一个单独的数组中。她反复查找这堆数中的最小数,将其删除,同时将其添加到数组的末尾。Bessie 在 p 个数的堆中找到最小数需要花费 p 秒。
boolcheck(int k){ int now = 1, sum = k * (k + 1) / 2; for (int i = n - 1; i; --i) { if (a[i] >= sum) sum -= (now++); if (now > k) return0; } return1; }
voiddickdreamer(){ std::cin >> n; for (int i = 1; i <= n; ++i) std::cin >> a[i]; std::sort(a + 1, a + 1 + n); int L = 0, R = n, res = n; while (L + 1 < R) { int mid = (L + R) >> 1; if (check(mid)) R = res = mid; else L = mid; } std::cout << std::min(res * (res + 1) / 2, a[n]) << '\n'; }