1- import java .io .BufferedReader ;
2- import java .io .InputStreamReader ;
3- import java .util .Arrays ;
4- import java .util .StringTokenizer ;
1+ import java .io .*;
2+ import java .util .*;
53
64public class Main {
7- static int N , M ;
8- static long start , end , result , high ;
9- static long [] tree ;
5+ static int n , m ;
6+ static int [] trees ;
7+ static StringTokenizer st ;
8+ static BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
9+ static BufferedWriter bw = new BufferedWriter (new OutputStreamWriter (System .out ));
1010
1111 public static void main (String [] args ) throws Exception {
12- BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
13- StringTokenizer st = new StringTokenizer (br .readLine ());
12+ pre_setting ();
13+ bw .append (String .valueOf (binarySearch ()));
14+ bw .close ();
15+ }
1416
15- N = Integer . parseInt ( st . nextToken ());
16- M = Integer . parseInt ( st . nextToken ()) ;
17- tree = new long [ N ] ;
17+ static int binarySearch (){
18+ int right , left , h , ans ;
19+ long cuttingH ;
1820
19- st = new StringTokenizer (br .readLine ());
20- for (int i = 0 ; i < N ; i ++) {
21- tree [i ] = Long .parseLong (st .nextToken ());
22- }
21+ right = 0 ;
22+ left = trees [n - 1 ];
23+ ans = left ;
2324
24- Arrays .sort (tree );
25- end = tree [N - 1 ];
26- result = Long .MIN_VALUE ;
27- while (start <= end ){
28- long sum = 0 ;
29- high = (end + start ) / 2 ;
25+ while (right <= left ){
26+ h = (right + left ) / 2 ;
27+ cuttingH = cutting (h );
3028
31- for (int i = 0 ; i < N ; i ++) {
32- long tmp = tree [i ] - high ;
33- if (tmp > 0 ) sum += tmp ;
29+ if (cuttingH < m ) left = h - 1 ;
30+ else {
31+ right = h + 1 ;
32+ ans = h ;
3433 }
35- if (sum >= M ){
36- start = high + 1 ;
37- result = Math .max (result , high );
38- }else {
39- end = high - 1 ;
34+ }
35+ return ans ;
36+ }
4037
41- }
38+
39+ static long cutting (int h ){
40+ long ans = 0 ;
41+
42+ for (int i = 0 ; i < n ; i ++){
43+ if (trees [i ] <= h ) continue ;
44+
45+ ans += (trees [i ] - h );
4246 }
43- System .out .println (result );
47+ return ans ;
48+ }
49+
50+
51+ static void pre_setting () throws Exception {
52+ st = new StringTokenizer (br .readLine ());
53+
54+ n = Integer .parseInt (st .nextToken ());
55+ m = Integer .parseInt (st .nextToken ());
56+
57+ trees = new int [n ];
58+ st = new StringTokenizer (br .readLine ());
59+ for (int i = 0 ; i < n ; i ++) trees [i ] = Integer .parseInt (st .nextToken ());
60+ Arrays .sort (trees );
4461 }
4562
4663}
0 commit comments