线段树
文章平均质量分 81
aozil_yang
这个作者很懒,什么都没留下…
展开
-
HDU 1166 敌兵布阵 (树状数组 || 线段树单点更新)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 67811 Accepted Submission(s): 28496Problem DescriptionC国的死对头A国这段时间正在进行军事演原创 2016-03-20 23:50:47 · 505 阅读 · 0 评论 -
HDU 3954 Level up (线段树)
题意:有n 个英雄,初始化为等级1,0经验。告诉你升每一级所需经验数。 两种操作:1. 将[L,R]中的英雄来杀能力值为e 的怪物, 这些英雄涨 等级*e 的经验。2. 询问区间中最大经验。思路:线段树, 维护一个区间中最大等级, 升级所需要最小经验,最大经验数。其实挺暴力的。我们想一想 什么时候 可以加懒惰标记?杀死怪物后,区间内没有人原创 2017-06-30 17:09:32 · 369 阅读 · 0 评论 -
HDU 4578 Transformation (线段树)
题意:4种操作:区间加和, 区间赋值,区间乘法, 查询区间 一次方和,二次方和,三次方和。思路:区间赋值优先级最高。直接把加法标记和乘法标记直接赋0, 然后计算和。其次是乘法, 先计算和, 如果发现有加法标记,在更新一下加法标记, 因为 (a+b)*x = a*x + b*x; 相当于原数乘以x 在加bx ,此时加法标记由b变成了bx。最后是加法。更新区间和时,原创 2017-06-26 22:25:24 · 316 阅读 · 0 评论 -
HDU 4553 约会安排 (线段树 -- 区间合并(多种优先级的区间合并) )
题意:题意不说了= =~毕竟中文题。思路:求长度为len 的最左位置,显然是一个 区间合并的线段树问题。但是有两个优先级, 一个是屌丝,一个是女神。所以 直接开两个状态在结点中记录。第一个状态 记录的是 一个区间中 什么都没有的 左边最大连续长度l1, 右边最大连续长度r1, 和最大连续长度m1.第二个状态记录的是 一个区间中 无视屌丝的 左边最大连续长原创 2017-06-27 21:50:25 · 515 阅读 · 0 评论 -
POJ 2828 Buy Tickets (线段树)
题意:n 个人进入队列, 告诉你每个人插入的位置。求最后的序列。思路:线段树很好写。线段树结点维护 这个区间内剩余座位的数量。倒着枚举, 根据座位剩余量 往里插即可。#include #include #include using namespace std;const int maxn = 200000 + 10;int ans[maxn];int s原创 2017-07-15 18:35:31 · 272 阅读 · 0 评论 -
CodeForces - 384E Propagating tree(DFS序 + 二分 + 线段树)
题意:给你一棵树, 两种操作:1. 将结点x 所有后代进行加和val, x 结点加 val ,x 孩子 加(-val) x 孩子的孩子加 -(-val), 以此类推。2. 求结点x 的权值。思路:比赛时没啥好思路,就做别的题去了, 但总感觉这就是线段树。果真没错。 其实挺水的= =整体思路:先将树dfs序跑一遍, 使得每个点变成连续的。将树分成两原创 2017-07-09 22:08:31 · 509 阅读 · 0 评论 -
UVA 1455 Kingdom (线段树 + 并查集 + 离散化)
题意:给你n 个城市,初始时,没有任何双向道路相连接。两种操作:1. 将A点和B点连接。2.询问一条y = C的水平线 和多少个连通块 多少个点连接。思路:因为询问只是涉及到y 坐标。并且数据较大。我们直接存下所有的y 坐标 离散化一下。然后就可以建立线段树了。线段树维护两个值 一个时连通块个数,一个是点的个数。操作1 ,我们维护每个连通块 y 坐标最大和最原创 2017-07-31 17:25:04 · 335 阅读 · 0 评论 -
CodeForces 240F TorCoder(线段树)
题意:你给你一个长度为n 的字符串, q 次操作:每次操作将指定区间内拍成字典序最小的回文串。 如果不可能成回文串, 忽略这次操作。思路:大开脑洞一个题, 没想到这题还能线段树搞。(挺巧妙的)线段树统计一个区间内, 每个字母出现的次数。那么对于每个区间操作:[x,y]我们先看看这个区间长度是奇数还是偶数, 如果奇数, 必须只有一个出现次数为奇数的字母。原创 2017-08-07 21:44:07 · 378 阅读 · 0 评论 -
CodeForces - 145E - Lucky Queries(线段树[区间合并])
题意:告诉你一个4和7 的序列两种操作:1. 讲区间的数反转(即4变7 7变4)2。 输出总区间中 非递减子序列的长度。思路:注意:子序列是可以不连续的很明显是线段树了。统计4的长度。统计7 的长度。统计4开头 7结尾的长度。然后就是简单的区间合并问题了。因为涉及区间反转,所以 可以在开同样的变量 记录反转后 4 的长度, 反转原创 2017-07-19 16:40:16 · 347 阅读 · 0 评论 -
HDU 5649 DZY Loves Sorting (二分 + 线段树)
题意:给你n 个数(1~n的排列), m 个操作, 操作1: 将指定区间 升序排序操作2: 将指定区间降序排列。最后问你某一个的位置的数是多少?思路:神题~~~没想到这能二分去做。。直接二分那个数是啥。 然后模拟整个操作。将比二分的值小的赋为0, 大的赋为1, 然后就是模拟操作对于升序排序, 直接看看这个区间有多少个0, 多少个1,(线段树维护原创 2017-08-11 19:08:53 · 377 阅读 · 0 评论 -
UVA 1232 || LA 4108 (线段树)
题意:按先后顺序告诉你每个长方形的左边界和右边界和高度, 求总覆盖度? 当前长方形的覆盖度为 左右的长度 使得他自己的高度最大。思路:很明显线段树。我们直接按照输入顺序依次更新。线段树里结点存的是线段,而不是点。记录这个区间高度最大值,最小值。当最大值小于等于h 时, 在递归更新。直到不能更新或者 区间全都比h小为止。这样会TLE,要加个剪枝。当前更新为h 时原创 2017-07-29 02:41:57 · 360 阅读 · 0 评论 -
UVA 11354 Bond (最小生成树 + 树链剖分)
题意:给你一个图, q 个查询, 每个查询输出两点之间 的路径中 最大值的最小值。思路:要想路径最大值最小, 边肯定在最小生成树上。先把图建成最小生成树。那么问题就是 输出树上两点之间的 边权最大值。赤裸裸的树剖。可惜比赛时脑残没有想到 最小生成树。#include #include #include #include using namespac原创 2017-08-21 17:41:43 · 298 阅读 · 0 评论 -
POJ Hotel (线段树--区间合并[区间赋值])
题意:n间空房子, 操作1问你能否连续住x 个房子, 如果能 就输出最左边的编号。 如果不能输出0;操作2 将给定的区间[x,y] 清空。思路:线段树区间合并。像极了HDU 1540 点击打开博客链接建树 和 那个题一样, 每个结点 维护 一个区间 从左边开始最大连续长度l, 从右边开始最大连续长度r, 中间最大连续长度m(只不过改成了区间赋值的形式,加一个懒惰原创 2017-06-20 22:06:18 · 953 阅读 · 0 评论 -
HDU 3642 Get The Treasury (线段树 体积交[转成面积交])
题意:求n 个长方体的体积交(至少三次以上)。思路:因为Z的范围比较小。直接暴力Z轴, 把所有Z轴转成 二维的平面。直接求z个 面积交即可。注意 区间是 一闭一开。#include #include #include #include using namespace std;const int maxn = 2000 + 10;int T, ks;原创 2017-06-29 23:43:07 · 363 阅读 · 0 评论 -
HDU 4288 Coder || CodeForces - 85D Sum of Medians (线段树)
题意:给你3种操作:1. 向集合中加入数x。2.在集合中删除数x。3.求和sum: 将集合中的数组排好序,将下标(从1开始) 对5取模为3 的位置的数 求和。思路:线段树结点 sum[i] 表示 对5取模为i 的数的和。cnt 表示这个区间内存在的数的个数。那么每次1,2 操作更新单个结点, 然后pushup:左子树的位置和父结点的下标位置是一样的, 右原创 2017-06-20 18:13:35 · 413 阅读 · 0 评论 -
HDU 1754 I Hate It (线段树 -- 单点替换,区间最值)
I Hate ItTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 62499 Accepted Submission(s): 24268Problem Description很多学校流行一种比较的习惯。老师们很原创 2016-07-13 01:10:01 · 320 阅读 · 0 评论 -
团体程序设计天梯赛-练习集 -- L2-014. 列车调度(线段树)
L2-014. 列车调度时间限制 300 ms内存限制 65536 kB代码长度限制 8000 B判题程序 Standard 作者 陈越火车站的列车调度铁轨的结构如下图所示。Figure两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每原创 2016-07-17 00:14:09 · 2203 阅读 · 0 评论 -
Codeforces Round #197 (Div. 2) -- D. Xenia and Bit Operations(线段树)
D. Xenia and Bit Operationstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputXenia the beginner programmer has a seque原创 2016-07-08 16:33:42 · 554 阅读 · 0 评论 -
ICPCCamp2017 Day 5 E HDRF(DFS序列 + 线段树 + 离散化)
大体题意:给你一颗树,ri 为以当前结点为根的最小子树上的权值(单点),每个点有固定的权值vi,每个点的权值都不一样,每次你必须优先访问ri最小的,然后删掉,然后重新计算ri,求这个删除点的路径?思路:比赛中只想到了用dp 记录某个点的最小权值,然后一直跳下去,然后在回来更新dp这样肯定是超时的。因为回来更新太慢了。其实没必要用dp记录最小权值。直接给这棵树 进行dfs序列原创 2017-02-17 17:33:44 · 461 阅读 · 0 评论 -
POJ 1769 Minimizing maximizer (dp + 线段树)
题意:找最少的区间使得依次连续覆盖所有n 个数。思路:令dp[i]表示覆盖到 以i 为终点的区间的最少个数。那么dp[i] 转移肯定来自 s[j]~t[j] 里面的,我们需要 找一个k 使得 s[j] dp[i] = min(dp[i], dp[k]+1);找最小值可以用线段树优化。边界是dp[1] = 0#include #include #include原创 2017-03-15 21:05:31 · 602 阅读 · 0 评论 -
POJ 2528 Mayor's posters (线段树区间赋值 + 离散化)
题意:给你n 个海报的左端点和右端点 依次贴好后, 求最后能看见几个海报?思路:正常思路想到的是把2n 个端点依次离散化,然后区间赋值,然后查询线段树上每一个区间,最后统计赋值数的种类。但是这样有个小坑:例如1 - 10 1 - 4 6 - 10, 离散化后 区间是 1- 4 1- 2 3 - 4 这样 就把1-4 给覆盖掉了, 就会少数一个海报。得到2n 个原创 2017-06-06 18:10:34 · 445 阅读 · 0 评论 -
HDU 4027 Can you answer these queries? (线段树 - 区间开根取整)
题意:给你n 个数, 两种操作,一种区间成段开根号取整,另一种求区间和。思路:因为一个数开上大约7,8次 就成1 了, 1在开根号不变了。因此我们在递归子区间时,如果发现这个区间都是1了,那就不用在递归了。在维护一个pushup 求sum 即可注意:1. 开long long2. 区间左右端点可能出现左大于右的情况。#include #include #in原创 2017-06-06 21:18:31 · 567 阅读 · 0 评论 -
HDU 4614 Vases and Flowers (线段树[区间赋值+区间求和] + 二分)
题意:给你n 个花瓶,每个花瓶只能放一朵花。两种操作操作1:给你f 朵花, 从a位置开始放,如果空花瓶不够了,或者花放完了, 就不放了。 输出 放的第一朵的花的位置 和最后一朵花的位置。操作2:给定区间[a,b] 将这个区间内的花瓶清空, 输出扔花的数量。思路:操作2很好处理, 先查询这个区间花的数量(有花可以设置为1,没花为0), 在区间修改原创 2017-06-19 00:53:29 · 597 阅读 · 0 评论 -
HDU 1540Tunnel Warfare Tunnel Warfare (线段树- 区间合并-单点更新查询)
题意:给你n 个数(1,2,3,,,n),刚开始都是连续的, 有三种操作:1. 将某个数x 切割开(变的不连续)2. 恢复上一个切割的数(变的连续)3. 查询x 位置数, 最长连续的长度。思路:线段树:需要维护 l 表示这个区间从左端点开始最大连续长度r 表示这个区间从右端点开始的最大连续长度m 表示这个区间的最大连续长度。整体是单点更新,单点查询。 就是原创 2017-06-07 14:57:58 · 426 阅读 · 0 评论 -
ZOJ 1610 Count the Colors (线段树-区间覆盖)
题意:给你 n 个棍子的区间, 和颜色c,要求把这些区间染色c,求最后每种颜色能看见几段?思路:直接按照给的顺序区间覆盖即可,最后一个很深的dfs , 把 线段树上所有区间的懒惰标记都往下传。最后统计每个叶子结点(单节点)的值即可。另外注意 区间 是左闭右开 或者左开右闭 反正不是 全闭!!!!很蛋疼的是建树 竟然建成了1,n,1 应该是1,8000,1 RE了原创 2017-06-07 16:01:53 · 434 阅读 · 0 评论 -
HDU 3974 Assign the task(dfs序 + 线段树区间赋值,单点查询)
题意:给一棵树, C x 操作 查询x 节点的权值, T X Y, 将X 这课子树上所有节点权值都赋值为Y。思路:因为是子树所有节点。直接dfs序跑一遍, 将所有节点变成连续的, 然后就可以用线段树了。剩下的就是 线段树区间赋值,单点查询问题了。#include #include #include #include using namespace std;co原创 2017-06-07 21:31:48 · 433 阅读 · 0 评论 -
HDU 6162 Ch’s gift (2017多校9 - 树链剖分 + 线段树)
题意:给一棵树, q 个查询,每个查询 输出 一条链中 点权 在指定范围内的 加和。思路:链中的操作,显然是用树链剖分。但是有个很难处理的问题, 如和求一个链中的 点权 在制定范围内的加和。用线段树就可以了。维护区间内最小值,最大值, 和 总和。如果区间最小值, 最大值 都在范围内,那么肯定整个区间都在制定范围内了, 就不用在向下找了。如果区间 最大值 小于制定原创 2017-08-22 20:07:00 · 602 阅读 · 0 评论