Question link is https://online.codingblocks.com/player/8634/content/5276?s=1615
#include
#include
using namespace std;
bool isvalidConfig(int arr[],int n,int st,int mid){
int students = 1;
int currPages = 0;
for(int i=0;i<n;i++){
if(currPages + arr[i] > mid){
students++;
if(students>st){
return false;
}
}
else{
currPages += arr[i];
}
}
return true;
}
int pages(int arr[],int n,int st){
int s=0,e=0;
int ans=0;
for(int i=0;i<n;i++){
e += arr[i];
s=max(s,arr[i]);
}
int mid;
while(s<=e){
mid = (s+e)/2;
if(isvalidConfig(arr,n,st,mid)){
ans = mid;
e = mid-1;
}
else
s = mid+1;
}
return ans;
}
int main() {
int T;
cin>>T;
while(T–){
int n,st;
cin>>n>>st;
int arr[n];
for(int i=0;i<n;i++){
cin>>arr[i];
}
cout<<pages(arr,n,st)<<endl;
}
return 0;
}