题意:f[i] = min(f[i+L]~f[i+R]) + x,计算f数组。从大到小计算即可,用线段树维护一下。

  1. #pragma comment(linker, "/STACK:10240000,10240000")
  2.  
  3. #include <iostream>
  4. #include <cstdio>
  5. #include <algorithm>
  6. #include <cstdlib>
  7. #include <cstring>
  8. #include <map>
  9. #include <queue>
  10. #include <deque>
  11. #include <cmath>
  12. #include <vector>
  13. #include <ctime>
  14. #include <cctype>
  15. #include <set>
  16.  
  17. using namespace std;
  18.  
  19. #define mem0(a) memset(a, 0, sizeof(a))
  20. #define lson l, m, rt << 1
  21. #define rson m + 1, r, rt << 1 | 1
  22. #define define_m int m = (l + r) >> 1
  23. #define rep(a, b) for (int a = 0; a < b; a++)
  24. #define rrep(a, b) for (int a = (b - 1); a >= 0; a--)
  25. #define all(a) (a).begin(), (a).end()
  26. #define lowbit(x) ((x) & (-(x)))
  27. #define constructInt4(name, a, b, c, d) name(int a = 0, int b = 0, int c = 0, int d = 0): a(a), b(b), c(c), d(d) {}
  28. #define constructInt3(name, a, b, c) name(int a = 0, int b = 0, int c = 0): a(a), b(b), c(c) {}
  29. #define constructInt2(name, a, b) name(int a = 0, int b = 0): a(a), b(b) {}
  30. #define pc(a) putchar(a)
  31. #define ps(a) printf("%s", a)
  32. #define pd(a) printf("%d", a)
  33. #define sd(a) scanf("%d", &a)
  34.  
  35. typedef double db;
  36. typedef long long LL;
  37. typedef pair<int, int> pii;
  38. typedef multiset<int> msi;
  39. typedef set<int> si;
  40. typedef vector<int> vi;
  41. typedef map<int, int> mii;
  42.  
  43. const int dx[] = {, , , -, , , -, -};
  44. const int dy[] = {, , -, , -, , , -};
  45. const int maxn = * 1e4 + ;
  46. const int maxm = 1e5 + ;
  47. const int minv = 1e7 + ;
  48. const int max_val = 1e6 + ;
  49. const int MD = 1e9 +;
  50. const LL INF = 1e15;
  51. const double PI = acos(-1.0);
  52. const double eps = 1e-;
  53.  
  54. template<class T> T gcd(T a, T b) { return b == ? a : gcd(b, a % b); }
  55.  
  56. struct SegTree {
  57. LL minv[maxn << ];
  58. void build(int l, int r, int rt) {
  59. minv[rt] = INF;
  60. if (l == r) return ;
  61. define_m;
  62. build(lson);
  63. build(rson);
  64. }
  65. LL get(int L, int R, int l, int r, int rt) {
  66. if (L <= l && r <= R) return minv[rt];
  67. define_m;
  68. LL res = INF;
  69. if (L <= m) res = min(res, get(L, R, lson));
  70. if (R > m) res = min(res, get(L, R, rson));
  71. return res;
  72. }
  73. void update(int p, LL x, int l, int r, int rt) {
  74. if (l == r) {
  75. minv[rt] = x;
  76. return ;
  77. }
  78. define_m;
  79. if (p <= m) update(p, x, lson);
  80. else update(p, x, rson);
  81. minv[rt] = min(minv[rt << ], minv[rt << | ]);
  82. }
  83. };
  84.  
  85. SegTree st;
  86. int cost[maxn], len[maxn];
  87. int main() {
  88. //freopen("in.txt", "r", stdin);
  89. int n;
  90. while (cin >> n) {
  91. rep(i, n) sd(cost[i]);
  92. rep(i, n) sd(len[i]);
  93. st.build(, n, );
  94. rrep(i, n) {
  95. LL x = cost[i];
  96. if (i + len[i] < n) x += st.get(i + , i + + len[i], , n, );
  97. st.update(i + , x, , n, );
  98. }
  99. cout << st.get(, , , n, ) << endl;
  100. }
  101. return ;
  102. }

[zoj3632]线段树的应用的更多相关文章

  1. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  2. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  3. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  4. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  5. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  6. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  7. CF719E(线段树+矩阵快速幂)

    题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

随机推荐

  1. Linux系统安装docker教程-CentOS7(完美教程)

     一.前言 最近有网友反应不在安装Linux 安装docker,为了方便大家更快的安装,以CentOS7安装为例,写了一篇比较简单的博客,让大家学习. 二.背景介绍 Linux,全称GNU/Linux ...

  2. tp5中的input助手函数

    详见手册:https://www.kancloud.cn/manual/thinkphp5/118044

  3. 2019-2020-1 20199329《Linux内核原理与分析》第八周作业

    <Linux内核原理与分析>第八周作业 一.本周内容概述: 理解编译链接的过程和ELF可执行文件格式 编程练习动态链接库的两种使用方式 使用gdb跟踪分析一个execve系统调用内核处理函 ...

  4. 如何使用Markdown 编写文档

    Markdown 是一种轻量级标记语言,用来编写文本文档,一般后缀名为.md.该语言在 2004 由约翰·格鲁伯(John Gruber)创建. 由于Markdown 语法简单,易读易写,变得越来越通 ...

  5. 新版gitbook导出pdf

    文章目录 gitbook自带的npm模块gitbook 使用vscode的插件Markdown PDF 使用CommandBox GitBook Exporter 最近想把自己写的一个gitbook转 ...

  6. JDK14的新特性

    文章目录 虽然JDK13在今年的9月17号才发布,但是丝毫不会影响到下一个版本JDK14的开发工作.听说官方定的新功能马上就要官宣了,我们这里不妨来提前推断一下. 在9月17号的发布中,Oracle提 ...

  7. 数据之路 - Python爬虫 - 动态页面

    一.Ajax数据爬取 1.Ajax介绍 Ajax,全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML. 它不是一门编程语言,而是利用JavaSc ...

  8. 如何在mysql中实现自然排序

    背景 熟悉mysql的同学应该清楚,mysql在对字符串做order by排序时是按照字典序进行排序的,但是如果字符串中包含数字的话(我们称这种类型的字符串为alphanumeric),仅按照字典序的 ...

  9. Azkaban3.81.x部署+坑

    一.前提安装 1.1 Java1.8环境搭建 1) 下载jdk1.8并解压: # tar -zxvf jdk-8u201-linux-i586.tar.gz -C /usr/local 2) 添加Ja ...

  10. Java 类类型之 String 类型

    类类型 引用数据类型存的都是地址,通过地址指向对象: 基本数据类型存的都是具体值: 字符串 (String) 类型 特点: 1.字符创都是对象: 2.一旦初始化,不能被更改,字符串缓冲区支持可变的字符 ...