[zoj3632]线段树的应用
题意:f[i] = min(f[i+L]~f[i+R]) + x,计算f数组。从大到小计算即可,用线段树维护一下。
- #pragma comment(linker, "/STACK:10240000,10240000")
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <cstdlib>
- #include <cstring>
- #include <map>
- #include <queue>
- #include <deque>
- #include <cmath>
- #include <vector>
- #include <ctime>
- #include <cctype>
- #include <set>
- using namespace std;
- #define mem0(a) memset(a, 0, sizeof(a))
- #define lson l, m, rt << 1
- #define rson m + 1, r, rt << 1 | 1
- #define define_m int m = (l + r) >> 1
- #define rep(a, b) for (int a = 0; a < b; a++)
- #define rrep(a, b) for (int a = (b - 1); a >= 0; a--)
- #define all(a) (a).begin(), (a).end()
- #define lowbit(x) ((x) & (-(x)))
- #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) {}
- #define constructInt3(name, a, b, c) name(int a = 0, int b = 0, int c = 0): a(a), b(b), c(c) {}
- #define constructInt2(name, a, b) name(int a = 0, int b = 0): a(a), b(b) {}
- #define pc(a) putchar(a)
- #define ps(a) printf("%s", a)
- #define pd(a) printf("%d", a)
- #define sd(a) scanf("%d", &a)
- typedef double db;
- typedef long long LL;
- typedef pair<int, int> pii;
- typedef multiset<int> msi;
- typedef set<int> si;
- typedef vector<int> vi;
- typedef map<int, int> mii;
- const int dx[] = {, , , -, , , -, -};
- const int dy[] = {, , -, , -, , , -};
- const int maxn = * 1e4 + ;
- const int maxm = 1e5 + ;
- const int minv = 1e7 + ;
- const int max_val = 1e6 + ;
- const int MD = 1e9 +;
- const LL INF = 1e15;
- const double PI = acos(-1.0);
- const double eps = 1e-;
- template<class T> T gcd(T a, T b) { return b == ? a : gcd(b, a % b); }
- struct SegTree {
- LL minv[maxn << ];
- void build(int l, int r, int rt) {
- minv[rt] = INF;
- if (l == r) return ;
- define_m;
- build(lson);
- build(rson);
- }
- LL get(int L, int R, int l, int r, int rt) {
- if (L <= l && r <= R) return minv[rt];
- define_m;
- LL res = INF;
- if (L <= m) res = min(res, get(L, R, lson));
- if (R > m) res = min(res, get(L, R, rson));
- return res;
- }
- void update(int p, LL x, int l, int r, int rt) {
- if (l == r) {
- minv[rt] = x;
- return ;
- }
- define_m;
- if (p <= m) update(p, x, lson);
- else update(p, x, rson);
- minv[rt] = min(minv[rt << ], minv[rt << | ]);
- }
- };
- SegTree st;
- int cost[maxn], len[maxn];
- int main() {
- //freopen("in.txt", "r", stdin);
- int n;
- while (cin >> n) {
- rep(i, n) sd(cost[i]);
- rep(i, n) sd(len[i]);
- st.build(, n, );
- rrep(i, n) {
- LL x = cost[i];
- if (i + len[i] < n) x += st.get(i + , i + + len[i], , n, );
- st.update(i + , x, , n, );
- }
- cout << st.get(, , , n, ) << endl;
- }
- return ;
- }
[zoj3632]线段树的应用的更多相关文章
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
随机推荐
- ROM定制开发教程-Android adb命令用法与实例解析
一.什么是ADB Android Debug Bridge(adb)是一个命令行工具,可让您与模拟器或连接的Android设备进行通信.您可以在android sdk / platform-tools ...
- Windows安装Tesseract-OCR 4.00并配置环境变量
一.前言 Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎.与Microsoft O ...
- [整理]svn常见问题汇总
1.’.’ is not a working copy.Can’t open file‘.svn/entries’: 系统找不到指定的路径.解答:原因是输入的访问路径不正确,如svn://192.16 ...
- C# 反射(一)
刚工作没多久,需要对以往的知识进行复习和巩固.先讲讲最近在公司常用到的反射机制. 反射(Reflection):提供了封装程序集.模块和类型的对象(Type 类型).可以使用反射动态创建类型的实例,将 ...
- mybatis源码学习:一级缓存和二级缓存分析
目录 零.一级缓存和二级缓存的流程 一级缓存总结 二级缓存总结 一.缓存接口Cache及其实现类 二.cache标签解析源码 三.CacheKey缓存项的key 四.二级缓存TransactionCa ...
- 干货最实用的 Python 多线程代码框架
前言 很多地方都要用到多线程,这是我经常用的多线程代码,放在博客园记录下. 代码 from multiprocessing.pool import ThreadPool thread = 10 ite ...
- 漫谈LiteOS-端云互通组件-MQTT开发指南(下)
1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...
- 面试官:你对Redis缓存了解吗?面对这11道面试题你是否有很多问号?
前言 关于Redis的知识,总结了一个脑图分享给大家 1.在项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果? 面试官心理分析 这个问题,互联网公司必问,要是一个人连缓存都不太清楚, ...
- c++动态数组的使用
在c++中,有的时候会遇到变长的数组(不管是一维的还是二维的),这个时候就需要用到动态数组了,并且要用new和delete两个操作符,这俩操作符一般成对使用. 先说一维的动态数组吧,直接上代码 #in ...
- python学习23之标准库
'''''''''标准库1.datetime 日期时间模块存在于Lib/datetime.py文件内'''from datetime import datetime,date,time #from d ...