![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
枚举星星
这个作者很懒,什么都没留下…
展开
-
洛谷 P3373 线段树模板题
链接:https://www.luogu.com.cn/problem/P3373题意:一个区间 三种操作1 给lr范围内乘一个数2 给lr范围内加一个数3 询问lr范围内的和啊这题真·做了一上午 啊这 还是自己太菜了因为需要两个标记 需要考虑运算顺序的问题(是先加后乘还是先乘后加)(自己也没明白 题解都说是先乘后加)但是需要另处理加法标记下面剖析一下代码吧首先build函数没什么说的void build(int k,int l,int r){ t[k].l=l,t[k].r=r原创 2020-10-08 11:32:17 · 173 阅读 · 0 评论 -
HDU3333 Turing Tree 线段树+离散化+离线处理
题源:https://vjudge.net/problem/15630/origin题意:给你一段长度为n的区间,每个点都有一个值,请你算出某个区间内,不同值之和。思路:0、先说这题,看了无数题解终于比着敲出来了,但是就是一直WA,一直WA。最后发现各个参数应该用long long 而不是int 我哭。1、首先是一些小的分析:我们注意到每个数可以很大(1e9),但是数的数量很小(3e4)...原创 2019-10-18 17:16:37 · 106 阅读 · 0 评论 -
HDU1255 覆盖的面积 扫描线模板题
题意:给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积。思路:扫描线模板题,不过是求面积交(覆盖两次及以上的面积),而不是区间并(覆盖一次的面积)。所以相对于求覆盖一次以上的面积,大体套路都相同,只不过pushup函数变了变:下面两个版本,第一个是自己写的,第二个是别人写的。先来解释一下:t[k].sum代表被覆盖大于等于一次的面积,t[k].sum2代表被覆盖大于等于两次的面积...原创 2019-08-29 14:05:31 · 127 阅读 · 0 评论 -
HDU1542 Atlantis 扫描线求矩形面积并 模板题
题意:给你平面内一些矩形的位置和大小,让你求面积之并(能看到的面积之和)。思路:扫描线板子题,自己最开始看了看扫描线实现的思路自己莽着写了一个竟然过了,但是后来证明是这个题数据量小,但是数据量一大就会T掉。。。所以老老实实又重新学了一遍扫描线。其实就是updata函数写的不对,总体思路还是离散化、建树、求面积。要注意这里有一个小难点就是点和区间的对应。值得仔细琢磨一下。#include&l...原创 2019-08-29 13:11:50 · 156 阅读 · 0 评论 -
Codeforces914D Bash and a Tough Math Puzzle 线段树维护gcd
题意:给你一个序列,有两个操作:1、把某个数改为另一个数。2、询问你某一区间内的所有数,能否只修改其中一个数(但不用修改),使得该区间所有数的最大公约数gcd为k,k在每次询问时给出。思路:单点修改不必说,对于询问:若只修改一个数使得序列符合要求,那么我们需要找有多少数不符合要求,那怎样才算符合要求呢?我这样说:若询问的区间的最大公约数是k的倍数(即gcd%k==0),那么所有的数(都是k的...原创 2019-08-29 11:31:23 · 181 阅读 · 0 评论 -
CodeForces855B Marvolo Gaunt's Ring 思维题/dp/线段树留坑
题意:给你一串数的序列,给你三个数 p,q,r,问你怎样选择数列中的三个数,使得pai+qaj+rak最大,其中i<=j<=k。思路:可用线段树,但俺不会,就当个思维题看吧(据说这题当思维题做要快很多,而且代码短小精悍,当然我是参考了bin巨和hmgg的思路,确实niubility。但是要说几点:inf要至少开到4e18,如果开到1e18是过不了的。二是注意一下循环里的三句:aa...原创 2019-08-29 10:30:57 · 148 阅读 · 2 评论 -
CodeForces343D Water Tree 线段树+DFS序
题意:给你一棵树,有三种操作:一是把某一结点及其子树全都灌满水,二是把某一结点及其父树都抽掉水,三是询问某一结点是否有水。思路:涉及某一结点与其子树和父结点的操作,所以妥妥的dfs序。不分析了,我也分析不出来,直接上做法:1、先把原树按dfs序标记好,然后以dfs序为基础建树。//这是模板2、对于灌水(灌满当前结点及其子树),就是简单的区间修改。3、对于抽水(抽掉当前节点及其所有父结点)...原创 2019-08-29 10:15:03 · 119 阅读 · 0 评论 -
CodeForces877E Danil and a Part-time Job 线段树+DFS序
题意:给你一棵树,每个结点都有一个灯,有两种操作:一是拨动某个结点对应子树的所有开关(若原来是开的就关上,若原来是关的就打开)。二是询问某个结点的状态(开还是关)。思路:首先是操作某一结点与其对应子树,所以妥妥的dfs序。关于dfs序(序嘛,肯定是序列的意思,那么肯定是一种线性结构),个人理解是把所有结点揪出来,然后把树形结构变成一个线性结构。然后对子树的操作就变成了对dfs序中某一区间的操作...原创 2019-08-29 09:45:31 · 143 阅读 · 0 评论 -
CodeForces160E Buses and People 线段树 区间合并 离散化
思路来源:https://blog.csdn.net/heucodesong/article/details/89181542题意:一堆人要坐公交车到目的地,给你n个公交车的起点、终点、出发时间(而且从起点到终点就是这个时间,秒过去)。给你m个人的上车点、下车点、开始等车的时间,问你每个人坐哪辆车合适,若有合适的车,输出车的编号,若没有,输出-1。思路:先说下开始的莽撞思路(T了):首先拿到这...原创 2019-08-28 21:01:27 · 130 阅读 · 0 评论 -
POJ2828 Buy Tickeys 树状数组+二分 线段树留坑。。。
题意:一堆人排队买票,告诉你一堆人的序号(序号的意思是插在“当前”第几个人的后面)和姓名(姓名用编号代替)。思路:线段树 或 树状数组+二分(自己还不会线段树,所以这里继续留坑)。首先想到,越晚入队的人,它的位置就越正确。比如说最后一个入队的人,插在第8个人后面,那在最终结果里,他一定是第9个人!所以我们考虑倒序处理数据。这题思路和POJ2182一样了,都是倒序树状数组处理+二分查找。每当...原创 2019-08-27 22:25:43 · 229 阅读 · 0 评论 -
POJ2182 Lost Cows 暴力/树状数组+二分/线段树(留坑)
题意:有n头牛排成一列,从1编号到n,但是编号顺序是乱序的。给你每头牛前面比它编号小的数目,问你正确的顺序是什么。思路:首先数据量8000不大,可以暴力过。其次想到给你的序列,从最后一个开始去掉(因为最后一个肯定是准的),然后逐个向前去掉。这个就联想到之前的逆序数balabla,可以用树状数组+二分来做,或者用线段树(线段树自带二分功能)。可惜只用线段树的方法我不会,而且二分我也给写错了!真的是...原创 2019-08-27 10:52:56 · 241 阅读 · 0 评论 -
SPOJ - GSS3 Can you answer these queries III
题意:线段树单点修改、区间连续最大值查询。(区间内有负数、正数)思路:在这里我们需要维护四个值(emmm 这是个模板题,为啥维护四个值,模板就这样我也没办法啊)。lmax、rmax、mmax、sum。含义不再赘述。注意核心代码是query代码 updata就是正常的维护即可,要注意的是,当一个点被修改,上述每个值都要被修改。大胆改就完了,反正有pushup呢!注意这里pushup也值得好好琢...原创 2019-08-22 22:20:27 · 134 阅读 · 0 评论 -
POJ3667 Hotel 线段树
题意:一个旅馆有很多房间,要安排客人住宿。有如下要求:1、房间排列是线性的(即呈一条线)。2、每个房间只能住一个人。3、每来一个团队住宿,只能安排在连续的编号里,且若有多种情况满足条件,开始位置必须尽可能早。4、若不能住下当前团队,输出0,否则输出起始编号。思路:拿到这个题目还是毫无思路,不过还好是模板题,就用学长发的模板套了一下。1、首先建树,我们需要维护三个变量,lmax,rmax...原创 2019-08-22 21:39:12 · 202 阅读 · 0 评论 -
HDU1540 Tunnul Warfare 线段树
题意:大意是给你成线性排列的一个村庄,有如下三种操作:摧毁某一村庄。询问某一村庄所连接的最多村庄数。修复最近被摧毁的村庄。思路:典型的线段树处理。单点修改,区间查询,查询内容不是简单的求和,而是求目标点所在区间的最大连续长度。我们需要用到三个变量:lmax rmax mmax,分别对应当前区间从左端开始的、右端开始的、中间开始的最长连续区间。所以updata函数还是很好写的,主要是下面的q...原创 2019-08-22 21:17:41 · 118 阅读 · 0 评论 -
OpenJudge - 2528:Mayor's posters 线段树区间更新+离散化
题目来源:http://bailian.openjudge.cn/practice/2528?lang=en_US题意:简化版题意:给你一个长为10000000(1e7)的线段(因为高度都一样 可以无视高度 只看成线段)。然后给定区间让你涂色,每次涂色颜色都不一样,同一位置后涂的颜色会覆盖掉之前涂的,涂完所有颜色,问最后能看到多少种颜色。分析:区间操作,用线段树的区间修改。但分析数据量,线段...原创 2019-08-10 12:01:31 · 101 阅读 · 0 评论