95分求助qwq
查看原帖
95分求助qwq
167990
IceAge楼主2021/10/2 13:10

rt,WA了第四个点……

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int l,k;
int rec[100005];
ll minn=LLONG_MAX,maxn=-1;
ll calc(ll n)
{
    ll sum=0,res=0;
    for (int i=1;i<=l;i++)
    {
        sum=max(0ll,sum+rec[i]);
        if (sum>=n)
        {
            res++;
            sum=0;
        }
    }
    return res;
}
void work(ll l,ll r,int sign)
{
    if (l>r)
        return;
    // sign=-1  both
    // sign=0   left
    // sign=1   right
    ll mid=(l+r)>>1;
    ll q=calc(mid);
    if (q<k)
        work(l,mid-1,sign);
    if (q>k)
        work(mid+1,r,sign);
    if (q==k)
    {
        minn=min(minn,mid);
        maxn=max(maxn,mid);
        if (sign==1)
            work(mid+1,r,sign);
        if (sign==0)
            work(l,mid-1,sign);
        if (sign==-1)
        {
            work(l,mid-1,0);
            work(mid+1,r,1);
        }
    }
    return;
}
int main()
{
    // freopen("IceAge.in","r",stdin);
    // freopen("IceAge.out","w",stdout);
    scanf("%d%d",&l,&k);
    for (int i=1;i<=l;i++)
        scanf("%d",&rec[i]);
    work(1,LLONG_MAX,-1);
    if (maxn==-1)
        puts("-1");
    else
        printf("%lld %lld\n",minn,maxn);
    return 0;
}
2021/10/2 13:10
加载中...