sb
二分题
我CTM-1打成-2!!?
判无解的时候都要
check
一下。。不能=0就出-1.
【代码】
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#define N 100005
#define Mod 1000000007
#define INF 0x7fffffff
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ull base=31;
ll read()
{
ll x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
int n,m;
int a[N];
ll L,R,Mx,Amn,Amx;
int Check(ll mid)
{
ll now=0;int sum=0;
for(int i=1;i<=n;i++)
{
now+=a[i];now=max(now,1LL*0);
if(now>=mid) sum++,now=0;
}
return sum;
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;i++) a[i]=read(),R+=(a[i]>0)?a[i]:0;
Mx=R;L=1;
while(L<=R)
{
ll mid=L+R>>1;
if(Check(mid)>=m) Amx=mid,L=mid+1;
else R=mid-1;
}
R=Mx,L=1;
while(L<=R)
{
ll mid=L+R>>1;
if(Check(mid)<=m) Amn=mid,R=mid-1;
else L=mid+1;
}
if(Check(Amn)!=m||Check(Amx)!=m) printf("-1\n");
else printf("%lld %lld\n",Amn,Amx);
return 0;
}