BZOJ 1911 [Apio2010]特別行動隊
阿新 • • 發佈:2018-02-19
using class int 不能 ring zoj 斜率 printf print
題解:裸的斜率優化
少了一個括號WA了幾發QWQ
總結:以後不能寫這麽長的式子
問題:我還不會決策單調性QWQ
#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; }
BZOJ 1911 [Apio2010]特別行動隊