45分求助
查看原帖
45分求助
329698
_youdu666_楼主2022/1/25 13:29

RT

#include<bits/stdc++.h>
using namespace std;
long long n,k,a[100001],l,r,mid,s,ssa,ss,sa,rr;
int i,j;
int anssm,ansbg;
int main()
{
	cin>>n>>k;
	for(i=1;i<=n;i++)
	cin>>a[i];
	l=1,r=99999999999;
	while(l<r)
	{s=ss=sa=ssa=0;
		mid=(l+r)>>1;
		for(i=1;i<=n;i++)
		{
			s+=a[i],sa+=a[i];
			if(s<0) s=0;
			if(sa<0) sa=0;
			if(s>=mid) s-=mid,ss++;
			if(sa>=mid+1) sa-=mid+1,ssa++;
		}
		if(ss==k)
		{
			if(ssa<k||mid==r)
			{
				ansbg=mid;
				break;
			}
			else
			{
				l=mid+1;
				continue;
			}
		}
		if(ss<k) r=mid;
		else l=mid+1;
	//	cout<<mid<<" ";
	}
	//cout<<ansbg;
	l=1,r=99999999999;
	while(l<r)
	{s=ss=sa=ssa=0;
		mid=(l+r)>>1;
		for(i=1;i<=n;i++)
		{
			s+=a[i],sa+=a[i];
			if(s<0) s=0;
			if(sa<0) sa=0;
			if(s>=mid) s-=mid,ss++;
			if(sa>=mid-1) sa-=mid-1,ssa++;
		}
		if(ss==k)
		{
			if(ssa>k||mid==l)
			{
				anssm=mid;
				break;
			}
			else
			{
				r=mid;
				continue;
			}
		}
		if(ss<k) r=mid;
		else l=mid+1;
	//	cout<<mid<<" ";
	}
	if(anssm==ansbg&&anssm==0)
	cout<<"-1";
	else
	cout<<anssm<<" "<<ansbg;
}
2022/1/25 13:29
加载中...