题意: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. ROM定制开发教程-Android adb命令用法与实例解析

    一.什么是ADB Android Debug Bridge(adb)是一个命令行工具,可让您与模拟器或连接的Android设备进行通信.您可以在android sdk / platform-tools ...

  2. Windows安装Tesseract-OCR 4.00并配置环境变量

    一.前言 Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎.与Microsoft O ...

  3. [整理]svn常见问题汇总

    1.’.’ is not a working copy.Can’t open file‘.svn/entries’: 系统找不到指定的路径.解答:原因是输入的访问路径不正确,如svn://192.16 ...

  4. C# 反射(一)

    刚工作没多久,需要对以往的知识进行复习和巩固.先讲讲最近在公司常用到的反射机制. 反射(Reflection):提供了封装程序集.模块和类型的对象(Type 类型).可以使用反射动态创建类型的实例,将 ...

  5. mybatis源码学习:一级缓存和二级缓存分析

    目录 零.一级缓存和二级缓存的流程 一级缓存总结 二级缓存总结 一.缓存接口Cache及其实现类 二.cache标签解析源码 三.CacheKey缓存项的key 四.二级缓存TransactionCa ...

  6. 干货最实用的 Python 多线程代码框架

    前言 很多地方都要用到多线程,这是我经常用的多线程代码,放在博客园记录下. 代码 from multiprocessing.pool import ThreadPool thread = 10 ite ...

  7. 漫谈LiteOS-端云互通组件-MQTT开发指南(下)

    1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...

  8. 面试官:你对Redis缓存了解吗?面对这11道面试题你是否有很多问号?

    前言 关于Redis的知识,总结了一个脑图分享给大家 1.在项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 面试官心理分析 这个问题,互联网公司必问,要是一个人连缓存都不太清楚, ...

  9. c++动态数组的使用

    在c++中,有的时候会遇到变长的数组(不管是一维的还是二维的),这个时候就需要用到动态数组了,并且要用new和delete两个操作符,这俩操作符一般成对使用. 先说一维的动态数组吧,直接上代码 #in ...

  10. python学习23之标准库

    '''''''''标准库1.datetime 日期时间模块存在于Lib/datetime.py文件内'''from datetime import datetime,date,time #from d ...