博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
APIO2010特别行动队
阅读量:6341 次
发布时间:2019-06-22

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

斜率优化

# include 
# include
# include
# include
# include
# define Sqr(x) (1LL * (x) * (x))# define IL inline# define RG register# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long ll;IL ll Read(){ RG char c = getchar(); RG ll x = 0, z = 1; for(; c > '9' || c < '0'; c = getchar()) z = c == '-' ? -1 : 1;; for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + c - '0'; return x * z;}const int MAXN(1000010);int n, Q[MAXN], head, tail;ll f[MAXN], sum[MAXN], a, b, c;IL ll F(RG ll x){ return a * Sqr(x) + b * x + c;}IL double K(RG int i, RG int j){ RG ll x1 = 2 * a * sum[i], y1 = f[i] + a * Sqr(sum[i]) - b * sum[i]; RG ll x2 = 2 * a * sum[j], y2 = f[j] + a * Sqr(sum[j]) - b * sum[j]; return 1.0 * (y2 - y1) / (x2 - x1);}int main(){ n = Read(); a = Read(); b = Read(); c = Read(); for(RG int i = 1; i <= n; i++) sum[i] = sum[i - 1] + Read(); for(RG int i = 1; i <= n; i++){ while(head < tail && K(Q[head], Q[head + 1]) <= sum[i]) head++; f[i] = f[Q[head]] + F(sum[i] - sum[Q[head]]); while(head < tail && K(Q[tail - 1], Q[tail]) >= K(Q[tail], i)) tail--; Q[++tail] = i; } printf("%lld\n", f[n]); return 0;}

转载于:https://www.cnblogs.com/cjoieryl/p/8206398.html

你可能感兴趣的文章
linux ssh tunnel使用
查看>>
十、详解FFplay音视频同步
查看>>
自定义元素探秘及构建可复用组件最佳实践
查看>>
比特币现金价格分析:BCH / USD下跌仍然受到支撑
查看>>
小猿圈Python教程之全面解析@property的使用
查看>>
mpvue开发小程序所遇问题及h5转化方案
查看>>
View和Activity的生命周期
查看>>
解决PHP下载大文件失败,并限制下载速度
查看>>
java B2B2C Springcloud电子商城系统—Feign实例
查看>>
java B2B2C Springcloud多租户电子商城系统 (五)springboot整合 beatlsql
查看>>
Throwable是一个怎样的类?
查看>>
Python基础(一)
查看>>
三条代码 搞定 python 生成验证码
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
无线和有线路由哪种性能更好
查看>>
Dwr3.0纯注解(纯Java Code配置)配置与应用浅析三之后端反向调用前端
查看>>
Ubuntu下安装遨游浏览器
查看>>
自定义Linux service脚本
查看>>
微信开发之发红包
查看>>