WA
查看原帖
WA
118630
Lube楼主2020/7/2 19:05
#include<bits/stdc++.h>
using namespace std;
int n,l;
long long q[50005];
double sum[50005],s[50005],dp[50005];
double xlv(int i,int j)
{
	int xi,yi,xj,yj;
	xi=s[i];yi=dp[i]+(s[i]+1+l)*(s[i]+1+l);
	xj=s[j];yj=dp[j]+(s[j]+1+l)*(s[j]+1+l);
	return (yj-yi)/(xj-xi);
}
int main()
{
	scanf("%d%d",&n,&l);
	for(int i=1;i<=n;i++)
	{
		scanf("%lf",&sum[i]);
		sum[i]+=sum[i-1];s[i]=sum[i]+i;
	}
	int head,tail;head=tail=1;
	for(int i=1;i<=n;i++)
	{
		int k;k=2*s[i];
		while(head<tail&&xlv(q[head],q[head+1])<k)head++;
		int j=q[head];
		dp[i]=dp[j]+(s[i]-s[j]-1-l)*(s[i]-s[j]-1-l);
		while(head<tail&&xlv(q[tail],i)<xlv(q[tail-1],q[tail]))tail--;
		q[++tail]=i;
	}
	printf("%lld",(long long)dp[n]);
}
2020/7/2 19:05
加载中...