这道题就是一道模拟题。。。

没有什么难度的。

容易发现$l_{k}=r_{k-1}+1$

也就是区间是连续的。

之后就根据这个进行二分就好了。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define gc getchar()
#define ll long long
using namespace std;
const int N=1e5+5,mod=1e9+7,M=1e6;
template<class o>
inline void qr(o &x)
{
    x=0;char c=gc;int f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=gc;}
    while(c>='0'&&c<='9'){x=x*10+(c^48);c=gc;}
    x*=f;
}
template<class o>
void qw(o x)
{
    if(x<0)putchar('-'),x=-x;
    if(x/10)qw(x/10);
    putchar(x%10+48);
}
int w[N],n,k;
int check(ll mid)
{
    int ans=0;ll s=0;
    for(int i=1;i<=n;i++)
    {
        s+=w[i];
        if(s<0)s=0;
        else if(s>=mid)s=0,ans++;
    }
    return ans;
}
int main()
{
//    freopen("autoac.in","r",stdin);
    qr(n),qr(k);
    for(int i=1;i<=n;i++)qr(w[i]);
    ll l=1,r=1e12;
    while(l<r)
    {
        ll mid=l+r>>1;
        if(check(mid)>k)l=mid+1;
        else r=mid;
    }
    ll L=l;l=1,r=1e12;
    while(l<r)
    {
        ll mid=l+r+1>>1;
        if(check(mid)>=k)l=mid;
        else r=mid-1;
    }
    ll R=l;
    if(check(R)!=k){puts("-1");return 0;}
    qw(L);putchar(' ');qw(R);
    return 0;
}