方程

$\Large f(i)=min(f(j)+(s(i)-s(j)-1-L)^2)$

其中$s(i)$为i的前缀和再加上$i$

对于某个$i$若$j$比$k$优,则

$\large f(j)+(s(i)-s(j)-L-1)^2<f(k)+(s(i)-s(k)-L-1)^2$

展开可以化简成$\large (f(j)-f(k)+s(j)^2-s(k)^2)/(2*(s(j)-s(k)))<=s(i)-L-1$

这样我们就可以用斜率优化了

设点$i$的坐标为$(f(i)+s(i)^2,2*s(i))$,维护一个下凸壳即可

代码

#include<cstdio>
#define maxn 50005
#define LL long long
int n,l,S,T,q[maxn];
LL f[maxn],s[maxn];
double calc(int a,int b){
return (f[a]-f[b]+s[a]*s[a]-s[b]*s[b])/(2.0*(s[a]-s[b]));
}
void insert(int x){
while(S<T-&&calc(x,q[T-])<=calc(q[T-],q[T-]))T--;
q[T++]=x;
}
int main(){
scanf("%d%d",&n,&l);l++;
for(int i=;i<=n;i++){
scanf("%d",s+i);
s[i]+=s[i-]+;
}
T++;
for(int i=;i<=n;i++){
while(S<T-&&calc(q[S+],q[S])<=s[i]-l)S++;
int x=q[S];
f[i]=f[x]+(s[i]-s[x]-l)*(s[i]-s[x]-l);
insert(i);
}
printf("%lld\n",f[n]);
return ;
}

最新文章

  1. 【WP 8.1开发】解决摄像头翻转问题(RuntimeApp篇)
  2. 自制jquery可编辑的下拉框
  3. android学习疑问汇兑
  4. 第三个Sprint冲刺第三天
  5. jQuery入门级part.1
  6. POJ1364 King
  7. PL/SQL设置编码方式
  8. Nginx+Keepalived实现高可用站点
  9. 关于google CDN 在中国访问不了的解决办法
  10. 如何使用git
  11. 恶补jquery(四)jquery中事件--冒泡
  12. Sizeof的三种作用
  13. 洛谷P3390【模板】矩阵快速幂——矩阵运算入门笔记
  14. git报错
  15. Maven学习笔记1(clean compile package install)
  16. Linux systemd limits
  17. 使用shape设置android控件只有部分边框有颜色
  18. dubbo环境搭建与tomcat集成、DEMO示例、常见问题(最完整版本、带管理控制台、监控中心、zookeeper)
  19. iOS开发-图片浏览器(优化)
  20. highcharts PHP中使用

热门文章

  1. NTT数论变换
  2. javascript 插件开发教程
  3. 笔试题-求小于等于N的数中有多少组素勾股数
  4. [转] .htaccess实现www 与没有www之间的重定向
  5. asp.net Core 使用redis(StackExchange.Redis)
  6. ubuntu安装更新命令
  7. 2019-8-31-C#-字典-Dictionary-的-TryGetValue-与先判断-ContainsKey-然后-Get-的性能对比
  8. XMLHTTPRequest状态status完整列表
  9. 解决VS2012新建MVC4等项目时,收到此模板加载程序集“NuGet.VisualStudio.Interop…”的错误
  10. opencv3.1.0 在控制台程序中报错:winnt.h(6464): error C2872: ACCESS_MASK: 不明确的