当前位置:首页 > Windows程序 > 正文

BZOJ 1911 [Apio2010]出格步履队

2024-03-31 Windows程序

#include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long Lint; const int maxn=1000009; int n; Lint A,B,C; Lint s[maxn]; Lint f[maxn]; Lint Getk(int x){ return f[x]+A*s[x]*s[x]-B*s[x]; } int q[maxn],h,t; int main(){ scanf("%d",&n); scanf("%lld%lld%lld",&A,&B,&C); for(int i=1;i<=n;++i){ int x;scanf("%d",&x); s[i]=s[i-1]+x; } q[h=t=1]=0; for(int i=1;i<=n;++i){ while((h<t)&&((Getk(q[h+1])-Getk(q[h]))>2*A*(s[q[h+1]]-s[q[h]])*s[i]))++h; int j=q[h]; f[i]=f[j]+A*(s[i]-s[j])*(s[i]-s[j])+B*(s[i]-s[j])+C; while((h<t)&&((Getk(q[t])-Getk(q[t-1]))*(s[i]-s[q[t]])<(Getk(i)-Getk(q[t]))*(s[q[t]]-s[q[t-1]])))--t; q[++t]=i; } printf("%lld\n",f[n]); return 0; }

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/34667.html

Jm-杰米博客Jamie
草根站长的技术交流乐园!IT不会不要紧快来好好学习吧!
  • 20786文章总数
  • 7494589访问次数
  • 建站天数
  • 友情链接