- import java.util.*;
- import java.lang.*;
- import java.io.*;
- public class Main
- {
- static boolean check(int[] arr ,long mid,int max){
- long sum = 0;
- int count = 1;
- for(int i =0;i<arr.length;i++){
- sum+=arr[i];
- if(sum>mid){
- count++;
- sum = arr[i];
- }
- if(count>max){
- return false;
- }
- }
- return true;
- }
- public static void main (String[] args) throws java.lang.Exception
- {
- //your code here
- Scanner sc = new Scanner(System.in);
- int n = sc.nextInt();
- int m = sc.nextInt();
- int[] arr = new int[n];
- long minRange = Integer.MIN_VALUE;
- long maxRange = 0;
- for(int i = 0;i<n;i++){
- arr[i]=sc.nextInt();
- if(arr[i]>maxRange){
- minRange = arr[i];
- }
- maxRange+=arr[i];
- }
- long s = minRange;
- long e = maxRange;
- long smallestSum = 0;
- while(s<=e){
- long mid = s+(e-s)/2;
- if(check(arr,mid,m)){
- smallestSum = mid;
- e = mid-1;
- }else{
- s = mid+1;
- }
- }
- System.out.println(smallestSum);
- }
- }
Raw Paste