60分求调
查看原帖
60分求调
457002
szhl0803楼主2022/8/24 16:49
//P1182 数列分段 Section II
#include <iostream>
#include <cstdio>
//typedef ll long long;
using namespace std;
const int N=1e5+5;
int a[N],n,m;long long l,r;
bool check(int k)
{
	long long l=0,cnt;
	for(int i=1;i<=n;i++)
	{
		if(cnt+a[i]<=k)cnt+=a[i];
		else cnt=a[i],l++;
	}
	return l>m;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);l=max(l,1ll*a[i]);r+=a[i];
	}
	while(l<r)
	{
		//printf("",l,r);
		long long mid=l+r>>1;
		if(!check(mid))r=mid;
		else l=mid+1;
	}
	cout<<l;
	return 0;
 } 
2022/8/24 16:49
加载中...