80分TLE求调
查看原帖
80分TLE求调
991501
huhaoxiang2012楼主2025/7/24 16:50
#include<bits/stdc++.h>
using namespace std;
long long n,d,a[50005],ans,date[50005];
int check(long long x)
{
	long long sum=0,t=0;
	for(int i=1;i<=d;i++)
	{
		sum/=2;
		while(sum<x)
		{
			sum+=a[++t];
			if(t>n)
			{
				return 0;
			}
			if(x==ans)
			{
				date[t]=i;
			}
		}
	}
	return 1;
}
int main()
{
	cin>>n>>d;
	long long l=0,r=0;
	for(int i=1; i<=n; i++)
	{
		cin>>a[i];
		r+=a[i];
	}
	while(l+1<r)
	{
		int mid=(l+r)>>1;
		if(!check(mid))
		{
			r=mid;
		}
		else
		{
			l=mid;
		}
	}
	ans=l;
	check(ans);
	cout<<ans<<endl;
	for(int i=1;i<=n;i++)
	{
		if(date[i])
		{
			cout<<date[i]<<endl;
		}
		else
		{
			cout<<d<<endl;
		}
	}
	return 0;
}
2025/7/24 16:50
加载中...