80分数列分段
#include <bits/stdc++.h>
#define for(i,l,r) for(int i=l;i<=r;i++)
#define inf 10000001
using namespace std;
long long n,m,ans,l,tt,r,sum,now,mid,a[inf];
bool check(int x){
sum=0;
tt=0;
for(i,1,n){
if(a[i]+tt>x) {
sum++;
tt=a[i];
}
else {
tt+=a[i];//注意
}
}
return sum>=m;
#define for(i,l,r) for(int i=l;i<=r;i++)
#define inf 10000001
using namespace std;
long long n,m,ans,l,tt,r,sum,now,mid,a[inf];
bool check(int x){
sum=0;
tt=0;
for(i,1,n){
if(a[i]+tt>x) {
sum++;
tt=a[i];
}
else {
tt+=a[i];//注意
}
}
return sum>=m;
}
int main(){
cin>>n>>m;
for(i,1,n){
cin>>a[i];
r+=a[i];
l=max(l,a[i]);
}
while(l<=r){
mid=(l+r)>>1;
if(check(mid)){
ans=mid;
l=mid+1;//想清楚
}
else r=mid-1;
}
cout<<l;//为什么不是ans
return 0;
}
int main(){
cin>>n>>m;
for(i,1,n){
cin>>a[i];
r+=a[i];
l=max(l,a[i]);
}
while(l<=r){
mid=(l+r)>>1;
if(check(mid)){
ans=mid;
l=mid+1;//想清楚
}
else r=mid-1;
}
cout<<l;//为什么不是ans
return 0;
}
原绿色洒满天际