1 条题解
-
0昌孝阳 (changxiaoyang) LV 10 @ 2023-10-1 19:21:11
一个字[绝]
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; #define MAXN 1000000+10 int n,l,r; int a,b,c; int x[MAXN]; long long sum[MAXN],f[MAXN]; int q[MAXN]; long long sqr(long long x){return x*x;} inline double slop(int k,int j){return (double)(f[j]-f[k]+a*(sqr(sum[j])-sqr(sum[k]))+b*(sum[k]-sum[j]))/(double)(2*a*(sum[j]-sum[k]));} int main() { scanf("%d%d%d%d",&n,&a,&b,&c); for(int i=1;i<=n;i++)scanf("%d",&x[i]); for(int i=1;i<=n;i++)sum[i]=sum[i-1]+x[i]; for(int i=1;i<=n;i++){ while(l<r&&slop(q[l],q[l+1])<sum[i])l++; int t=q[l]; f[i]=f[t]+a*sqr(sum[i]-sum[t])+b*(sum[i]-sum[t])+c; while(l<r&&slop(q[r-1],q[r])>slop(q[r],i))r--; q[++r]=i; } printf("%lld",f[n]); return 0; }
- 1
信息
- ID
- 245
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 4
- 上传者