#4不过求调
查看原帖
#4不过求调
713826
EDJIW楼主2024/8/27 17:20
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll N=1e5+50;
ll n,k,l,r,a[N];
bool pd;

ll cheak(ll x){
	ll an=0,kk=0;
	for(ll i=1;i<=n;i++){
		an=max(0*1ll,an+a[i]);
		if(an>=x)kk++,an=0;
	}
//	cout<<kk<<endl;
	if(kk==k)return 1;
	if(k<kk)return 2;//x太小 
	return 3;
}

int main(){
	scanf("%lld%lld",&n,&k);
	for(ll i=1;i<=n;i++)scanf("%lld",a+i);
	
	l=-1e18-1,r=1e18+1;
	pd=true;
	while(l+1!=r){
		ll mid=l+r>>1;
		ll op=cheak(mid);
		if(op==1){
			pd=false;
			break;
		}
		else if(op==2)l=mid;
		else r=mid;
	}
	if(pd){
		printf("-1");
		return 0;
	}
	
	l=-1e18-1,r=1e18+1;
	while(l+1!=r){
		ll mid=l+r>>1;
		ll op=cheak(mid);
		if(op==1)pd=false;
		if(op==2)l=mid;
		else r=mid;
	}
	printf("%lld ",r);
	
	l=-1e18-1,r=1e18+1;
	while(l+1!=r){
		ll mid=l+r>>1;
		ll op=cheak(mid);
		if(op!=3)l=mid;
		else r=mid;
	}
	printf("%lld",l);
	
	
	return 0;
}
2024/8/27 17:20
加载中...