![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
Cry_Kill
坚持自己的梦想
展开
-
HDU 3397 Sequence operation 线段树综合题
题目地址 题意:给你个01串,有以下几种操作。 0.把[l.r]区间的所有数都置为0. 1.把[l.r]区间的所有数都置为1. 2.把[l,r]区间的所有数都置为其相反数. 3.求[l,r]区间内的1的个数. 4.求[l,r]区间内的最长的连续的’1’的个数.原创 2017-07-21 15:03:26 · 256 阅读 · 0 评论 -
线段树模板
线段树的查找,区间更新,延迟更新,扫描线,求一段区间去重后的和,加分割点的离散化原创 2017-07-19 17:17:23 · 542 阅读 · 0 评论 -
POJ 2886 Who Gets the Most Candies?
题目地址 题意:一群小朋友围成一个圈,然后每个小朋友都有一个数,先会给你一个k,代表标号为k的人淘汰,然后淘汰的那个人拥有的数字就是他左边或者右边a[i]个人,然后每个人获得的糖果数就是他第k个淘汰,k的因子个数,让你求出谁获得的糖最多 思路:通过线段树去维护小朋友的淘汰,先通过反素数表找到最大能获得的糖的人k,然后枚举出从第一位同学到k,就可以求出第k位淘汰的是谁了原创 2017-08-04 19:41:23 · 217 阅读 · 0 评论 -
POJ 2528 Mayor's posters(加分割点)
题目地址 题意:给你n个海报,海报的宽度是一样的,告诉你长度为l-r,求最后你能看到多少张广告 思路:蛮基础的延迟更新,但是要注意一点就是离散化的时候要加入分割点,因为如果直接离散化的话,就会出现有的区间就会忽略了,就这个要注意的地方原创 2017-08-04 23:24:05 · 211 阅读 · 0 评论 -
POJ 3225 Help with Intervals(开区间和闭区间)
题目地址 题意:你有5种操作,分别为U(并集操作)、I(交集操作)、D(相减操作)、C(反向相减操作)、S(异或操作),让你求出n次操作之后的集合分别是多少 思路:最初为全0,就代表空集,然后对于5种操作的结果就是:原创 2017-08-05 15:48:52 · 457 阅读 · 0 评论 -
HDU 1436 Horizontally Visible Segments(点放两倍)
题目地址 题意:两两可见的定义是对于第i条线段和第k条线段如果用一条平行线能够经过它们并且在它们之间不经过其他线段,则称这两条线段互为可见,求n条线段有多少个三条线段两两可见 思路:对x坐标进行排序,然后加线之前查询他能看到x坐标比他小的线段有哪些记录下来,然后更新,最后暴力求一遍就好了原创 2017-08-05 17:41:39 · 290 阅读 · 0 评论 -
POJ 2991 Crane(计算几何+线段树)
题目地址 题意:你有一个挖掘机,他的臂由n根小臂组成,最初的时候挖掘机的臂是垂直向上的,然后有n次操作,每次操作告诉你把第a和第a+1根臂之间的角度旋转为b(不是旋转角度为b),每次操作之后把最后那个臂的坐标输出 思路:用线段树去维护每个臂的向量,然后把第a和第a+1个臂之间的角度旋转为b这个操作就是将a+1到n个臂旋转b-rad[a]就好了,最后输出sum[1].x和sum[1].y就是最后那原创 2017-08-06 18:09:05 · 576 阅读 · 0 评论 -
HDU 3522 Farming(转化为体积并来写)
题目地址 题意:你有一个菜园,但是你很懒,于是就让n个人帮你种菜,每个人负责一个区域,一种种子,一共有m种价值的种子,但是每个地方只能种一种种子,种子价值越高的才会种下去,问你最后你的收成有多少 思路:我一开始是想改变sum数组,但是发现如果线段树的区间减少的时候很难更新值(要把之前的值记下来),然后看了下别人的思路,原来是把价值当成是长方体的高,就转化成体积并的题目了,就很简单了原创 2017-07-29 12:28:41 · 315 阅读 · 0 评论 -
POJ 2482 Stars in Your Window
题目地址 题意:这是我看过最浪漫的题目,其实题意特别简单,就是有一扇窗户长w宽h,然后天上有n个星星,告诉你星星的位置和星星的亮度,让你求出你能透过窗户看到的星星的总亮度最大是多少 思路:我看到这道题的时候想到了cf前段时间一次比赛的题目,感觉蛮像的,当时我还是想用线段树写但是那天TLE,我看到这题一看到数据我就发现肯定那种办法还是TLE的,参考别人的博客才发现这道题可以转化为扫描线去写,每个矩原创 2017-08-06 23:57:10 · 365 阅读 · 0 评论 -
Codeforces 794 F Leha and security system(线段树+构造)
题目地址:http://codeforces.com/contest/794/problem/F 题意:给你n个数字和两种操作,分别为1 l r x y(l~r区间里的数字把每位如果是x的改为y)2 l r(查询l~r区间内的数的和)思路:建10棵线段树,编号为0~9,代表的是每个数字在每个数中的权重,其他的和普通线段是一样,但是对于lazy的处理上有一个优化,因为每次访问到该节点的时候都是原创 2017-08-22 00:40:33 · 383 阅读 · 0 评论 -
HDU 3265 Posters(面积并模板题)
题目地址 题意:你有n张海报,但是每张海报上都有你不喜欢的地方,所以你会减掉,算最后墙上被海报覆盖的面积 思路:典型的面积并,本来特别正常的是吧剪完的海报分成4个矩形(图一)直接简单面积并的题目,因为这样就需要把那个存线段的数组开成8倍的,我当时想为什么不直接把减去的面积让他的入边的标记为-1,出边的标记为1,这样就不解决了吗,就是因为这个偷懒的想法,让我花了一天的时间去想,然后最后还是回归正常原创 2017-07-25 00:58:13 · 302 阅读 · 0 评论 -
HDU 6070 Dirt Ratio(区间最优比率)
题目地址 题意:给你一个序列,让你选择一个区间[l,r],区间中的不同元素的个数/区间长度最小,求出这个最小的AC率。 size(l,r)/(r-l+1)<=mid -> size(l,r)+l*mid <=(r+1)*mid思路:二分AC率,用线段树去维护算出哪个区间能满足这个条件原创 2017-08-10 16:01:06 · 411 阅读 · 0 评论 -
HDU 1156 Brownie Points II
题目地址 题意:给你n个点,然后你选择在坐标系选择一条垂直于x轴并经过一个点的线,然后再通过那个点做一条垂直于y轴的线,这样就形成了一个新的坐标系,第一象限和第三象限的点数为st的分数,第二象限和第四象限的点数为ol的分数,求出st最坏的情况下的最高分,并求出当时ol的分数原创 2017-08-09 17:50:54 · 393 阅读 · 0 评论 -
HDU 3954 Level up
题目地址 题意:就是打怪升级,告诉你升到该级的经验是多少,然后你获得的经验是你的等级乘以该怪所给的经验,求出一段区间中的最大经验值 思路:用结构体分别记录该段区间的最大经验值以及想要升级的最小经验基数(就是这个基数乘以最大等级会使得能够升级)还有该区间的最大等级,当你给的经验都不能让最小经验基数升级的话就自己更新这段区间以及延迟标记就好了,如果能升级再向下更新,直到找到完整升级的那个区间原创 2017-07-30 18:43:06 · 311 阅读 · 0 评论 -
HDU 4027 Can you answer these queries?
题目地址 题意:给你一组数据,有两种操作,0操作是把l~r区间内的数开方,1操作是求l~r区间中的和 思路:因为数据的范围是2^64,所以最多开7次方就会变成1,如果这个区间都是1更新的时候就可以直接返回了,反之更新到底 PS:个人吐槽一下,为什么会存在这种操作就是居然l会大于r原创 2017-07-30 22:27:23 · 284 阅读 · 0 评论 -
HDU 2871 Memory Control(线段树区间更新,延迟更新+vector+二分)
题目地址 题意:操作系统内存分配,拥有4个操作:Reset:释放所有内存New x :从内存编号1开始分配一个x的空间,能发下则输出这个区间的头地址,如果放不下则输出Reject NewFree x:释放包含x的那个区间,并且输出那个区间的头地址与尾地址,x这个地方不能被释放则输出Reject FreeGet x:得到第x个区间的头地址,如果这个区间不存在,输出Reject Get原创 2017-07-22 01:07:48 · 402 阅读 · 0 评论 -
Codeforces 46 D Parking Lot(线段树区间更新模板题)
题目地址 题意:有长度为n米的停车场,停车的要求是要与前面一辆车至少隔a米,和后一辆车至少隔b米(只要符合要求就可以停入,不管之后会不会打破这个要求。PS:我就是想了好久没有想通),有m个操作,有两种操作类型:1 x 把长度为x米的车停入停车场(一定要符合停车要求)2 x 将第x个操作中停入的车开出原创 2017-07-22 18:12:02 · 623 阅读 · 0 评论 -
HDU 1828 Picture(线段树的周长并)
题目地址 题意:告诉你n个矩形左下角以及右上角的坐标,求出最后构成的图形的总周长原创 2017-07-23 19:08:34 · 420 阅读 · 0 评论 -
HDU 5692 Snacks
题目地址 题意:这就不用解释了吧 思路:我是真的没有想到用线段树的,这个把树转换成线段树,看了大佬的想法是通过根节点1做一遍dfs,记录L,R,就是包括了该节点的全部子树的L,R的范围,并且记录根节点到该节点的价值最大值,然后每次更新就是更新原有的num[i]与要更新值的差值(s-num[c]),查询的时候就是通过L,R数组取出他的序号,然后其他的就是基本线段树的查找,区间更新,延迟更新。原创 2017-07-19 20:29:57 · 240 阅读 · 0 评论 -
HDU 3874 Necklace&&HDU 3333 Turing Tree(求一些区间l~r中的数去重后的和)
题目意思 题目意思:告诉你一些数,然后让你求一些区间l~r中的数去重后的和 思路:预处理全部的查询,通过每个查询区间的右边界排序,每次更新一个值,如果之前更新过就这个数就把之前的位置上的该值给删掉,再在现在的位置添加这个值。原创 2017-08-01 11:29:12 · 339 阅读 · 0 评论 -
HDU 3642 Get The Treasury(体积并,离散化)
题目地址 题意:告诉你n个长方体的左前下和右后上的点的坐标,让你求出被至少三个长方体相交的体积 思路:因为z coordinate is no more than 500.所以z的范围不大可以遍历z的长度,每次对一个z区间判断包含这个z区间长方体做一次面积并,因为这个z区间是长方体的z区间的一部分,所以可以计算出体积来。然后就很好解释了,对于每个Z[i+1]-Z[i]可以求出他这个高度区间的面积原创 2017-07-27 10:39:23 · 361 阅读 · 0 评论 -
HDU 3016 Man Down(线段树+离散化+dp)
题目地址 题意:好像是是男人就下100层的游戏,告诉你n个木板,左右边界的位置以及高度和踏上这块木板的得分,当你的得分低于0就死了,求最后的得分最大为多少。 思路:通过线段树来维护出来该线段跳下去后,左右能到达的木板编号,然后根据木板的先后到达的情况做dp就好了(坐标太大需要离散化)原创 2017-08-01 23:14:06 · 368 阅读 · 0 评论 -
Codeforces 877 E Danil and a Part-time Job(线段树+dfs序)
题目地址 题意:给你一棵树,1为根节点,每个节点都有应该状态0或者1,你有两种操作,pow的操作是把该节点以及他的所有子树的每个节点进行自身异或的操作,get就是查询该节点以及他的所有子树的每个节点有多少个1。 思路:我们先通过dfs一边把所有的子树搜索出来,并标记好,然后我们通过这个给出的子树的范围对线段树进行更新,之后的操作就是根据之前求出的子树范围来更新和查询,线段树就是一个简单的区间更新原创 2017-10-26 12:27:39 · 791 阅读 · 0 评论