线段树
Huglight
这个作者很懒,什么都没留下…
展开
-
HDU 1754 I Hate It 线段树 RMQ
题意:给一串序列,有两种操作:更新某点x序列值为y;求区间[x, y]内序列最大值 思路:线段树模版题,建立线段树,节点值为该区间内最大值,更新时递归更新保证父亲节点在子节点更新后得到更新,查询时若查询区间完全包含当前区间,则返回当前区间值,否则返回两个子区间的最大值。在递归求子区间最大值时,需要判断当前区间是否与查询区间相交,只有相交时才继续递归。 #include<iostream>...原创 2019-08-13 17:38:10 · 101 阅读 · 0 评论 -
POJ 2528 Mayor's posters 线段树 离散化 区间覆盖
题意:给一个无限长的板子,按序在上面贴海报,求出最后能看到的海报的数量 思路:区间覆盖:把对应区间的值替换为当前值。 之前的线段树节点存储的要么是区间最值,要么是区间和,这个问题则存储的是当前被覆盖的值。由于题目给的数据量太大(1e7),故需要进行离散化操作。 离散化:只保存元素之间对应的关系,不去关注元素的具体值。这个题目的离散化还有一个坑点,就是当两个区间之间有空时,不会去计算之间空的那块区域...原创 2019-08-25 20:41:32 · 137 阅读 · 0 评论 -
HDU 1698 Just a Hook 线段树 区间修改
题意:给一个长度为n的棍子,每点初始长度为1,可以进行若干操作,每个操作将区间[x,y]内的长度变为1,2或3,求出进行所有操作之后棍子的总长度 思路:线段树模版题。树的每个节点存储区间和,每次操作之后更新各区间和即可 #include<iostream> #include<cstdio> #include<cmath> #include<cstring&...原创 2019-08-28 21:20:02 · 104 阅读 · 0 评论 -
Codeforces 1208D. Restore Permutation 线段树 RMQ 区间修改
题意:有一个隐藏的序列,序列值为1-N,给定一个序列,序列中每个值为隐藏序列中前面小于该点值的所有值之和,求出这个隐藏的序列 思路:显然给定序列中值为0的点对应的肯定为隐藏序列中值为1的点,从1到N枚举i,每次找出给定最后一个值为0的点,将其删除,隐藏序列中该点值即为i,位于改点右边的值减去i,继续找下一个最后值为0的点继续该操作,最后给定序列肯定值全为0,也即找到了答案序列。为了找最后一个值为0...原创 2019-08-29 00:04:30 · 125 阅读 · 0 评论 -
ZOJ 1610 Count the Colors 线段树 区间覆盖
题意:给一行画纸,在一些段上涂上颜色,每次给出段的左右端点和涂的颜色,求出最后从上往下看能看到的所有颜色,及各颜色的段数 思路:区间覆盖问题。每次更新区间颜色,最后查询时,对于叶子节点,记录当前颜色,若当前颜色等于之前记录过的颜色,表示仍处于连续的段中,若不等表示处于另一段,并更新记录的颜色。求出各个连续段中颜色出现的次数即可 #include<iostream> #include&l...原创 2019-08-29 22:54:58 · 118 阅读 · 0 评论 -
Codeforces 1198B. Welfare State 线段树
题意:给定n个村民的经济状态,有两种操作: 1 x y:村民x的经济变为y 2 x:所有经济小于x的村民经济变为x 求出在q个操作后所有村民的经济状态 思路:单点修改+区间修改,单点查询,由于只用到了叶子节点存储答案,且区间值与最终答案无关,故区间值不需存储状态,可以用作Lazy标记,并去掉pushup操作。区间修改相当于将1到n区间内的值变为当前值和x的较大值,直接修改第一个节点即可。 #i...原创 2019-09-06 22:16:38 · 129 阅读 · 0 评论