#include #include #include int main() { using namespace std; int n, s; cin >> n >> s; long long tot = 0; vector a(n); for (auto &e : a) { cin >> e; tot += e; } sort(a.rbegin(), a.rend()); // 分身のサイズが正の整数じゃなくて正の実数だったのを読み飛ばしていた... auto pred = [&](long long m) -> bool { int res = 0, large = 0; for (auto e : a) { if (e > m) { if (large % m == 0) { res += e; } large++; } } return res < s; }; long long ok = tot, ng = 0; while (ok - ng > 1) { long long mid = (ok + ng) / 2; if (pred(mid)) { ok = mid; } else { ng = mid; } } cout << ok << endl; }