就挺迷的
查看原帖
就挺迷的
226944
光锥xn楼主2021/4/13 23:06
#include<bits/stdc++.h>
#define ll long long
#define ma 50005
using namespace std;
ll n,L,c[ma],a[ma],b[ma];
double f[ma];
ll q[ma],l,r;
inline ll read()
{
	ll x=0;char  c=getchar();
	for(;!isdigit(c);c=getchar());
	for(; isdigit(c);c=getchar())x=(x<<3)+(x<<1)+c-'0';
	return x;
}
double _mck_(ll x,ll y)
{
	return (f[x]+b[x]*b[x]-f[y]-b[y]*b[y])/(b[x]-b[y]);
}
int main()
{
	register int i;
	int j,x;
	n=read();L=read();
	for(i=1;i<=n;i++){
		c[i]=read();
		c[i]+=c[i-1];
		a[i]=c[i]+i;b[i]=c[i]+i+L+1;
	}b[0]=L+1;
	//for(i=1;i<=n;i++)printf("%lld ",b[i]);
	for(i=1;i<=n;i++){
		while(l<r&&_mck_(q[l+1],q[l])<=2*a[i])l++;
		j=q[l];
		//printf("第%d %d %lld %lld\n",i,j,a[i],b[j]);
		f[i]=f[j]+a[i]*a[i]+b[j]*b[j]-2*a[i]*b[j];
		while(l<r&&_mck_(q[r],q[r-1])>=_mck_(i,q[r]))r--;
		q[++r]=i;
	}//printf("\n");
	//for(i=1;i<=n;i++)printf("%lld ",(ll)f[i]);
	printf("%lld",(ll)f[n]);
}

测试数据下下来本地过了(输出和答案一样),可洛谷评测就不过

2021/4/13 23:06
加载中...