博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HNOI2008]玩具装箱TOY
阅读量:6906 次
发布时间:2019-06-27

本文共 922 字,大约阅读时间需要 3 分钟。

\(F[i]=\min\{ F[j]+(lis[i]-lis[j]+i-j-1-L)^2 \}\)

\(f(i)=lis[i]+i,g(i)=f(i)+L+1\)

\(F[i]=F[j]+(f(i)-g(j))^2\)

\(F[i]=F[j]+f(i)^2-2f(i)g(j)+g(j)^2\)

\(F[j]=2f(i)g(j)+(F[i]-f(i)^2-g(j)^2)\)

\(g(j)\)为横坐标,则直线斜率为\(2f(i)\)

单调队列维护下凸壳即可

#include"cstdio"#include"cstring"#include"iostream"#include"algorithm"using namespace std;const int MAXN=5e4+5;int n,L;int q[MAXN];long long lis[MAXN],F[MAXN];long long get(int x){return lis[x]+L+x+1;}long long got(int x){return F[x]+get(x)*get(x);}bool cqr(int x1,int x2,int x3){    long long y3=lis[x3]+x3<<1ll;    return (got(x2)-got(x1))<=y3*(get(x2)-get(x1));}bool cqt(int x1,int x2,int x3){    return (got(x2)-got(x1))/(get(x2)-get(x1))*(get(x3)-get(x1))>=(got(x3)-got(x1));}int main(){    scanf("%d%d",&n,&L);    for(int i=1;i<=n;++i) scanf("%lld",&lis[i]),lis[i]+=lis[i-1];    int hd=1,tl=1;    for(int i=1;i<=n;++i){        while(hd

转载于:https://www.cnblogs.com/AH2002/p/10054626.html

你可能感兴趣的文章
在MyEclipse中部署项目到Tomcat服务器
查看>>
Kendo UI常用示例汇总(二十二)
查看>>
lnmp+coreseek实现站内全文检索(安装篇)
查看>>
六月技术指标和个人指标
查看>>
我的友情链接
查看>>
dojo layout
查看>>
初探 ELK - 每天5分钟玩转 Docker 容器技术(89)
查看>>
c#通过创建Windows服务启动程序
查看>>
系统架构设计指南
查看>>
我的友情链接
查看>>
Jquery Ajax方法传值到action
查看>>
亚马逊图书推荐--我感兴趣的
查看>>
Xmanager连接Centos6.3的远程桌面
查看>>
Office365:客户端升级后无法启动Microsoft Outlook
查看>>
我的友情链接
查看>>
在eclipse中查看Android源代码
查看>>
prometheus+grafana
查看>>
Liferay 启动过程分析3-处理启动事件(第四部分)
查看>>
Rust语言开发基础(七)Rust 特性
查看>>
CountDownLatch示例
查看>>