线段树
Dilly__dally
这个作者很懒,什么都没留下…
展开
-
HDU1166 (树状数组或线段树)
模板题。树状数组法:#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define ll long longconst int maxn=50005;const double eps=1e-8;int tree[maxn];inline int lowbit(int x){ ...原创 2018-07-21 09:48:25 · 495 阅读 · 0 评论 -
线段树学习
具体参考https://blog.csdn.net/zearot/article/details/48299459原创 2018-08-28 08:45:06 · 139 阅读 · 0 评论 -
HDU 3974 和 POJ 3321(线段树维护DFS序)
先介绍下DFS序树的dfs序就是用来维护一系列树上的问题的,这类问题主要是解决一棵树上的所有后代结点信息的更改和祖先结点有关,主要先通过dfs来记录一个树的每一个顶点的出入时间戳,来控制它子树上的所有结点的状态的更新。用in数组记录每个结点入栈的时间,out数组记录出栈时间(如果一个结点出栈之前没有结点出栈,那么出栈时间为上一个结点(可能是它自己)的入栈时间;否则出栈时间就等于上一个点的出...原创 2018-12-04 15:21:37 · 247 阅读 · 0 评论 -
HDU 1540(线段树区间合并+维护连续0或1)
题意:1-n个地道,m个次操作,D代表摧毁第i个地道,Q代表查询包含第i个地道的最大连续地道数目,并输出。R代表修复最近摧毁的那个地道;思路:这题利用了线段树的相邻结点区间是连续的特性,而且是维护连续的1,所以用llen、rlen、len数组分别表代表当前结点的1的最长连续前缀长、最长连续后缀长,最长连续区间长,对于某个结点,它的最长连续前缀等于它的左子结点的最长连续前缀,如果它的左子结点的最...原创 2018-12-03 09:51:58 · 256 阅读 · 0 评论 -
HDU 4027 Can you answer these queries?(线段树)
题意:给一个数组序列, 数组长度为100000 两种操作: 一种操作是将某一个固定区间所有数开方(向下取整)另一种操作是询问某个区间的所有数字之和。思路:数据范围2^64,最多开6、7次就到1,所以判断当sum[rt]==r-l+1时 return(相当于剪枝),由于更新比较特别,此题不需要lazy数组。最后注意query的数据左不一定小于右,所以要交换一下,还有就是以后不要混...原创 2018-12-01 20:34:32 · 194 阅读 · 0 评论 -
ZOJ 1610 Count the Colors(线段树区间染色+区间统计)
题意:在一条长度为8000的线段上染色,每次把区间[a,b]染成c颜色。显然,后面染上去的颜色会覆盖掉之前的颜色。求染完之后,每个颜色在线段上有多少个间断的区间。思路:此题有个坑点,就是染色是染区间,而不是染点,什么意思呢?举个栗子,比如1 2 1,3 4 1([1,2]和[3,4]被染成1),最后查找的时候是按左到右叶子查找的,所以会把这两个区间当成连续的,实质上是间隔的([2,...原创 2018-12-01 21:06:53 · 267 阅读 · 0 评论 -
POJ 2528 Mayor's posters (线段树+离散化+区间覆盖)
题意:n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000) 。求出最后还能看见多少张海报。思路:由于数据范围比较大,用数组存不下,所以可以离散化成n的范围,而这题的离散化也比较特殊,因为查询的时候是一个一个点向右查找的,如果遇到1 10,1 4,6 10这种数据,那么会被离散化成1 4,1 2,3 4,这样计...原创 2018-12-12 20:03:24 · 202 阅读 · 0 评论