博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P3628 [APIO2010]特别行动队 斜率优化
阅读量:5281 次
发布时间:2019-06-14

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

 

裸题,注意队列下标不要写错

Code:

#include
#include
#include
using namespace std;const int maxn = 2000000 + 3;long long f[maxn], sum[maxn], a, b, c;int n, q[maxn];inline double re_x(int i){ return sum[i]; };inline double re_y(int i){ return f[i] + a * sum[i] * sum[i] - b * sum[i]; }inline double re_slope(int i,int j){ return (re_y(i) - re_y(j)) / (re_x(i) - re_x(j)); }int main(){ freopen("input.txt","r",stdin); scanf("%d",&n); scanf("%lld%lld%lld",&a,&b,&c); for(int i = 1;i <= n; ++i)scanf("%lld",&sum[i]), sum[i] += sum[i - 1]; int head = 0, tail = 0; for(int i = 1;i <= n; ++i) { while(head < tail && re_slope(q[head], q[head + 1]) > sum[i] * 2 * a) ++ head; f[i] = f[q[head]] + a * (sum[i] - sum[q[head]]) * (sum[i] - sum[q[head]]) + b * (sum[i] - sum[q[head]]) + c; while(head < tail && re_slope(i, q[tail - 1]) >re_slope(q[tail - 1], q[tail])) -- tail; q[++tail] = i; } printf("%lld",f[n]); return 0;}

  

转载于:https://www.cnblogs.com/guangheli/p/9845168.html

你可能感兴趣的文章
* 和 ** python
查看>>
oracle 存储过程第四天
查看>>
【转】字符流和字节流的区别,使用场景,相关类
查看>>
代理模式
查看>>
第5章 C++STL泛化技术分析
查看>>
CentOS7 安装 Nginx
查看>>
afreechart
查看>>
android 布局 实现底部表单中底部按钮悬浮
查看>>
hihocoder编程练习赛52-2 亮灯方案
查看>>
CF983B XOR-pyramid
查看>>
Go之包
查看>>
Sharepoint学习笔记—习题系列--70-573习题解析 -(Q40-Q44)
查看>>
TCP和UDP协议的区别
查看>>
【UML】:时序图
查看>>
【POJ】2348 Euclid's Game(扩欧)
查看>>
const type& 与 type& 的区别
查看>>
JDK中工具类的使用
查看>>
MetaSploit攻击实例讲解------社会工程学set攻击(kali linux 2016.2(rolling))(详细)...
查看>>
Lucene3.6第一篇--创建索引
查看>>
代理服务器
查看>>