因为解题数一定随n增加单调不降,所以可以二分
判无解不能用ans==-1,因为ans可能得一个算出来不是切了k道的数
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
using namespace std;
#define MAXN 100010
#define MAXM 1010
#define ll long long
#define INF 1000000000000000000ll
#define MOD 1000000007
#define eps 1e-8
ll n,m;
ll a[MAXN];
ll cnt(ll x){
ll i;
ll now=0,re=0;
for(i=1;i<=n;i++){
now+=a[i];
now=max(0ll,now);
if(now>=x){
re++;
now=0;
}
}
return re;
}
int main(){
ll i;
scanf("%lld%lld",&n,&m);
for(i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
ll ans1=-1,ans2=-1;
ll l=1,r=INF;
while(l<=r){
ll mid=l+r>>1;
if(cnt(mid)<=m){
ans1=mid;
r=mid-1;
}else{
l=mid+1;
}
}
l=1,r=INF;
while(l<=r){
ll mid=l+r>>1;
if(cnt(mid)>=m){
ans2=mid;
l=mid+1;
}else{
r=mid-1;
}
}
if(cnt(ans1)!=m||cnt(ans2)!=m){
printf("-1\n");
}else{
printf("%lld %lld\n",ans1,ans2);
}
return 0;
}
/*
*/