还是DP题写起来容易的说。。。

直接看zky的一图流好了(话说zky用的是三分?。。。给跪)

 1 /**************************************************************
 2     Problem: 3437
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:1616 ms
 7     Memory:32056 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11
12 #define L q[l]
13 using namespace std;
14 typedef long long ll;
15 const int N = 1000005;
16
17 int n, l, r;
18 ll f[N], g[N], q[N];
19 ll sum1[N], sum2;
20
21 inline int read() {
22     int x = 0;
23     char ch = getchar();
24     while (ch < '0' || '9' < ch)
25         ch = getchar();
26     while ('0' <= ch && ch <= '9') {
27         x = x * 10 + ch - '0';
28         ch = getchar();
29     }
30     return x;
31 }
32
33 inline ll calc1(int x, int y) {
34     return (ll) g[x] - g[y];
35 }
36
37 inline ll calc2(int x, int y) {
38     return (ll) sum1[x] - sum1[y];
39 }
40
41 inline bool pop_head(int x, int i) {
42     return calc1(q[x + 1], q[x]) < i * calc2(q[x + 1], q[x]);
43 }
44
45 inline bool pop_tail(int x, int i) {
46     return calc1(i, q[x]) * calc2(q[x], q[x - 1]) < calc1(q[x], q[x - 1]) * calc2(i, q[x]);
47 }
48
49 int main() {
50     int i, b;
51     n = read();
52     for (i = 1; i <= n; ++i)
53         f[i] = read();
54     for (l = r = 0, i = 1; i <= n; ++i) {
55         b = read();
56         sum1[i] = sum1[i - 1] + b;
57         sum2 += (ll) i * b;
58
59         while (l < r && pop_head(l, i)) ++l;
60         f[i] += g[L] + i * (sum1[i] - sum1[L]) - sum2;
61         g[i] = f[i] + sum2;
62         while (l < r && pop_tail(r, i)) --r;
63         q[++r] = i;
64     }
65     printf("%lld\n", f[n]);
66     return 0;
67 }

View Code

转载于:https://www.cnblogs.com/rausen/p/4133378.html

BZOJ3437 小P的牧场相关推荐

  1. BZOJ3437:小P的牧场(斜率优化DP)

    Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1-n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制 ...

  2. bzoj 3437: 小P的牧场(斜率DP)

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1493  Solved: 830 [Submit][Status][Disc ...

  3. 【BZOJ3437】小P的牧场,斜率优化DP

    传送门 写在前面:感觉线性基太蛋疼了 思路: 原始方程 f[i]=min(f[j]+∑ik=j+1b[k]∗(i−k)+a[i])j∈[0,i)f[i]=min(f[j]+∑^i_{k=j+1}b[k ...

  4. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  5. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  6. 分享:个人是怎么学习新知识的

    为什么80%的码农都做不了架构师?>>>    挺多童鞋问我是怎么学习新知识的,干脆写篇文章总结一下,希望对大家有所帮助.对照书.技术博客.极客时间等学习的方式我就不说了. 一.早期 ...

  7. MongoDB自动备份全过程实录

    前段时间,个人小程序 IT牧场 因服务器磁盘空间被占满,导致MongoDB挂了.清理了一些无用的数据后,重启MongoDB,竟然无法启动,一番折腾(20分钟)后,总算修复了.这让我意识到:虽然是个人小 ...

  8. 分享:个人是怎么学习新知识的--周立

    本文转载,原文地址:     分享:个人是怎么学习新知识的 挺多童鞋问我是怎么学习新知识的,干脆写篇文章总结一下,希望对大家有所帮助.对照书.技术博客.极客时间等学习的方式我就不说了. 一.早期 在1 ...

  9. java 将千分位转为数字_java让数字显示千分位 mark

    /** * 格式化数字为千分位显示: * @param 要格式化的数字: * @return */ public static String fmtMicrometer(String text) { ...

最新文章

  1. Python:Resquest/Response
  2. 超实用的58个office快捷键汇总,办公室人员必备!
  3. softmax函数_干货 | 浅谈 Softmax 函数
  4. 30行代码如何写一封七夕密书?
  5. java 对象 转为繁体_Java实现将数字转化为繁体汉字表示
  6. PowerBI 秒级实时大屏展示方案 全面助力双十一
  7. 利用websocket实现一对一聊天
  8. java 怎么链接ndk的库_使用ndk-build链接现有的静态库
  9. [基础]sizeof和strlen
  10. mysql linux32_linux 32 位mysql 安装中的问题 以及修改数据库密码
  11. 【综述】2018年的一篇NER综述笔记
  12. 各路技术牛人都推荐的书
  13. 两个excel表格信息合并 自动匹配_别再复制黏贴了,合并两个Excel表格可以很简单!...
  14. 2.3.6 CSM、RMC和RSCT管理系统
  15. 项目管理中成本管理相关指标
  16. 纽约州立石溪分校计算机科学排名,美国纽约州立大学石溪分校排名_2019纽约州立大学石溪分校排名(USNews排名)...
  17. C++ uint8_t
  18. HBase系列2-HBase快速入门
  19. 交易系统解析(八)证券公司与基金公司系统综述
  20. C++电脑程序设计语言介绍

热门文章

  1. 美元为什么能够无限超发?
  2. 自动挡跑高速用S挡还是D挡? 回答
  3. 车辆等红灯时是用N档还是D档呢?
  4. 写ios系统和安卓系统的人到底有多牛?
  5. Java中/和/*和/**的区别简述
  6. Mybatis_day4_Mybatis的延迟加载
  7. t-sql 使用正则表达式_如何在T-SQL查询中使用可扩展表达式; 性能优势和实例
  8. azure 入门_Azure Function应用程序入门
  9. 在SQL Server中加入包含假设和CE模型变化
  10. 使用数据库维护计划SQL Server更新统计信息