use std::cmp::Reverse; use proconio::input; fn main() { input! { (n, s): (usize, usize), mut aa: [usize; n], } aa.sort_unstable_by_key(|&a| Reverse(a)); let is_ok = |x: usize| { let mut curr = 0; let mut sum = 0; while curr < n && sum + aa[curr] < s { sum += aa[curr]; curr += x; } curr >= n || aa[curr] <= x }; let mut ok = *aa.iter().max().unwrap(); let mut ng = 0_usize; while ok.abs_diff(ng) > 1 { let mid = (ok + ng) / 2; if is_ok(mid) { ok = mid; } else { ng = mid; } } println!("{ok}"); }