use std::io::{read_to_string, stdin}; fn main() { let temp = read_to_string(stdin()).unwrap(); let mut iter = temp .split_ascii_whitespace() .map(|x| x.parse::().unwrap()); let n = iter.next().unwrap(); let m = iter.next().unwrap(); let mut arr = (0..n).map(|_| iter.next().unwrap()).collect::>(); arr.sort(); let mut lo = 0; let mut hi = *arr.last().unwrap(); let mut cum = vec![0]; for &e in arr.iter() { cum.push(cum.last().unwrap() + e); } while hi >= lo && hi - lo > 1 { let mid = (hi + lo) / 2; let key = arr.binary_search(&mid); let s = match key { Ok(idx) => cum[n] - cum[idx] - (n - idx) * mid, Err(idx) => cum[n] - cum[idx] - (n - idx) * mid, }; if s < m { hi = mid - 1; } else { if lo == mid { hi = lo; } lo = mid; } } { let key = arr.binary_search(&hi); let s = match key { Ok(idx) => cum[n] - cum[idx] - (n - idx) * hi, Err(idx) => cum[n] - cum[idx] - (n - idx) * hi, }; if s >= m { println!("{}", hi); } else { println!("{}", lo); } } }