线段树
文章平均质量分 74
林伏案
妖蛾子良多的范老爷
展开
-
hdu3974(多叉树时间戳建模成线段树)
/*translation: 一个公司里面每个员工都有一个顶头上司,一旦给某个员工分配任务后,这个员工以及该员工的所有下属都在做该任务。 有若干操作,分配给员工任务以及查询该员工正在执行的任务。solution: 线段树,时间戳一般化 很明显该公司的所有员工间的关系可以用一颗多叉树来表示。然后就是dfs给这棵树打上时间戳。根据新分配的id号码 将其节点对应映射到线段树上面。这样分配任原创 2016-11-28 20:09:30 · 1224 阅读 · 1 评论 -
hdu4578(线段树多种区间操作)
/*translation: 对于一个区间有4个操作: 1.将a~b都加上c 2.将a~b都乘上c 3.将a~b都变成c 4.查询a~b的每个数的p次方的和。(p=1,2,3)solution: 典型的线段树应用,不过增加了多种操作。一开始没写对,WA了好久,后来意识到更新的时候各个sum之间更新顺序 是有讲究的,于是改了过来,然而还是WA。最后憋得没办法,看题解才发现各个懒惰标原创 2016-12-04 11:23:11 · 2517 阅读 · 0 评论 -
hdu1540(线段树维护连续区间模型)
/*translation: 打地道战,n个村庄用地道连成一条直线,鬼子有时破坏掉一个村庄,这时八路军要修好这个据点。现在要求询问任意一个村庄, 得出这个村庄现在与几个村庄相连,包括它本身。solution: 线段树维护连续子区间 将村庄抽象成一个点,正常下值为1,被破坏后变成0,即可将题目抽象成一个求目标节点所在的最长连续1序列的区间的长度。 所以在线段树里面维护3个信息,前缀最长原创 2016-11-19 19:57:50 · 3428 阅读 · 1 评论 -
hdu4614(二分查询线段树)
/*translation: 程序媛经常收到花:),现在有若干花瓶,以及对应的若干个操作,1 a b表示程序媛将从a号花瓶起,从左往右在每个空的 花瓶里放置1朵花,遇到花瓶里有花的就跳过。2 a b表示程序媛将清空a~b号 花瓶。对每个操作输出对应的信息,1操作输出最开始放置花和最后放置花的花瓶编号。2操作输出a~b之间的花朵数目。solution: 线段树+二分 很容易想到对1操作原创 2016-12-01 22:30:18 · 288 阅读 · 0 评论 -
hdu4027(线段树)
/*translation: 给出一列数列,有两种操作,一种是将数列的连续一部分的值变为原来的平方根。 另外一种是查询连续一段的和。solution: 线段树即可note: #: 一开始纠结怎么更新节点上的和,因为是将每一个值都变为原来的平方根,所以不可能在常数时间内更新完连续的 一段和。想了好久没有头绪,看了题解才知道关键是发现一个很重要的隐藏条件:只要一段连续区间的和等于r-原创 2016-11-19 15:03:49 · 400 阅读 · 0 评论 -
hdu1698(线段树区间操作,绝对懒惰标记)
/*translation: 有一段数列,初始值为1,后来有若干操作,把连续一段的数字改成1,2,3中的某一个。问经过若干操作后 这段数列的和是多少?solution: 线段树的区间操作。note: 注意这道题和poj3468的不同是poj3468的操作顺序对结果没有影响,而这道题是有影响的。 所以懒惰标记无论在更新还是查询的时候都要往下面带。date: 2016.11.18原创 2016-11-18 21:33:34 · 400 阅读 · 0 评论 -
poj2528(线段树,离散化)
/*translation: 有一堵墙,往上面贴海报,每张海报有各自的范围,可以相互覆盖,求最后还能看见多少张海报?solution: 线段树,离散化 每张海报的粘贴就是一个区间操作,所以可以考虑用线段树来解决。但是题目中所给的墙的长度数据量太大,都存下来 肯定MLE,所以考虑利用离散化,将每张海报的端点存储下来。然后利用这些端点来建立一颗线段树。然后就是查询操作 了,为了不让先后顺原创 2016-11-18 20:35:46 · 3474 阅读 · 2 评论 -
poj3468(线段数区间操作模板)
/*translation: 给出一列数组,有两种操作,将某一区间所有的数字都加上c,查询某一区间的和。solution: 线段树区间操作模板note:date: 2016.11.18*/#include #include using namespace std;const int maxn = 100000 + 5;const int INF = 1e9 + 10;原创 2016-11-18 09:57:46 · 718 阅读 · 0 评论 -
hdu1166(线段树)
/*translation: 给出一个数列,并且有若干操作,对某一数据增加或者减少。查询一段区间的和,给出查询的结果solution: 线段树直接搞note:date: 2016.11.16*/#include #include #include using namespace std;const int maxn = 50000 + 5;struct Node{原创 2016-11-16 23:10:58 · 354 阅读 · 0 评论 -
hdu4553(神TM烦的线段树维护连续区间ORZ)
/*translation: 中文题意,不表solution: 线段树维护连续区间 此题还是按照基本的线段树维护连续区间的方式来,但是有一点较为复杂,就是要同时维护 DS和NS两个线段树。所以要清楚二者之间的关系,NS能够影响到DS的树,而DS不能影响到 NS的区间。注意合并区间过程中极易出错。note: #: 之前WA了几次都是因为m=(s[o]+e[o])>>1和m=(l+r原创 2016-11-27 00:04:42 · 765 阅读 · 0 评论