线段树
沙雕.
此人很帅,什么都没有写
展开
-
HDU 1754 I Hate It(线段树维护区间最大值)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754解题思路:线段树讲解可以参考大佬的文章:https://www.cnblogs.com/TheRoadToTheGold/p/6254255.html这题就是普通的维护区间最大值。代码:#include<cstdio>#include<cstring>...原创 2019-04-15 19:41:37 · 170 阅读 · 0 评论 -
动态开点线段树(P1908/洛谷1908)
什么是动态开点线段树:假设操作次数为q,维护区间大小为m普通的线段树会先把所有可能需要的节点开辟出来需要的空间为O(4*m)这样可以:1.方便的通过节点下标所引导对应的左右儿子节点2.所有需要的节点都已经有了,不必在额外创建新节点动态开点线段树则是只开辟需要的节点,因此每个节点左右儿子都要记录需要的空间为O(q*logm)这样可以:1.很明显可以节省空...原创 2019-09-16 19:40:13 · 1300 阅读 · 0 评论 -
POJ 1177 Picture(线段树+离散化+扫描线)
题目链接:http://poj.org/problem?id=1177解题思路:①扫描线的思路:维护当前竖线在区间上的投影,左边就覆盖一遍,右边就清除一遍。周长所有竖线部分 = 将当前竖线处理到区间投影上后投影总长度前后差值周长所有竖线部分 = 两条竖线之间的间距查×2×投影段数②线段树的思路:需要维护区间内投影长度,以及区间内投影的段数。由于区间多次覆盖导...原创 2019-06-09 19:15:37 · 179 阅读 · 0 评论 -
HDU 1542 Atlantis(线段树+扫描线)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542解题思路:Part 1 扫描线相关介绍:简而言之,按顺序扫过这些个正方形的竖边,然后处理当前竖边在y轴上的投影每一个矩形都有两条边,入边就对区间覆盖一次,出边就消去一次。(不是全部清除)如图,两个有重叠的矩形的面积就分成了三部分算。每次只要算 两条竖边的间距×在y轴...原创 2019-06-07 22:26:08 · 271 阅读 · 0 评论 -
POJ 2777 Count Color (线段树+(状压))
题目链接:http://poj.org/problem?id=2777解题思路:题目大意操作1区间修改[A,B]改为C操作2区间统计颜色[A,B]注意给出的A,B不保证前者小,后者大方法一:统计颜色的时候刚开始直接没有任何优化扔进set发现TLE。想想也是,对于1212121212121这种颜色区间一次询问的复杂度就要O(N*logN)于是观察了一下颜色只有三十...原创 2019-06-13 15:47:47 · 143 阅读 · 0 评论 -
HDU 4614 Vases and Flowers(线段树区间修改)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614解题思路:操作一:选择起点填充之后的区间,直到插完所有的花或者区间右界,如果一个都插不进,那么输出“can not put anyone”,还要你输出第一个和最后一个插进去的位置操作二:选择区间[A,B]把所有的花拔出来,问拔出来多少支。线段树维护区间内空瓶子的个数操作一...原创 2019-06-01 19:08:35 · 81 阅读 · 0 评论 -
POJ 2991 Crane(线段树 + 一个数学公式)
题目链接:http://poj.org/problem?id=2991解题思路:题意是n根棍子,初始连接成一条直线,沿着y轴正方向放,每次操作是将指定两根棍子之间的夹角变成对应度数。每次询问最后棍子的末端在坐标轴上的位置。线段树思路:[A,B]维护第A到第B个棍子的向量(这个向量是平移到原点计算的)每次修改x这个位置的角度,那么就修改[x+1,n]于是,区间合并...原创 2019-06-12 22:28:20 · 339 阅读 · 0 评论 -
HDU 3974 Assign the task(线段树维护树的dfs序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3974解题思路:将所有的关系建树,每次修改每一节点的同时对其所有子节点修改。我们可以利用dfs序。记录某一个点进入(开始遍历子节点)的顺序,出去(所有子节点全部遍历)的顺序如图,其中一种dfs序为1 2 4 4 5 5 2 3 3 1,在一个节点这对位置中间都是都是这个节点的子节...原创 2019-05-28 20:40:31 · 108 阅读 · 0 评论 -
HDU 4578 Transformation(线段树乱维护)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578解题思路:①各种标记,用到哪下放到哪。肯定是能想到用各种标记维护的,关键是标记之间会相互影响。现在有三个标记:mtag维护乘法标记,初值为1add维护加法标记,初值为0isset维护区间是否用一个数覆盖操作1,如果加法标记有数值,那么让它的值乘以乘法标记,这样下次计...原创 2019-05-30 23:02:03 · 108 阅读 · 0 评论 -
HDU 4027 Can you answer these queries?(线段树暴力修改+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027解题思路:一个数组维护区间和。另一个维护区间是否都小于等于1,如果全是小于等于1就不用往下修改了。因为一个很大的数(2^63)开根号开不了几次就会等于1,所以就是这么暴力。注意每组测试数据后面一个换行。代码:#include<iostream>#incl...原创 2019-05-26 17:16:14 · 87 阅读 · 0 评论 -
Vijos 1083 小白逛公园 (线段树维护区间连续最大和)
题目链接:https://vijos.org/p/1083解题思路:线段树维护四个值:l表示区间左到右最大值r表示区间右到左最大值sum表示区间和ans表示区间连续最大和这题感觉就是HDU 1540的升级版http://acm.hdu.edu.cn/showproblem.php?pid=1540 代码:#include<cstdio>#in...原创 2019-04-20 11:10:32 · 159 阅读 · 0 评论 -
HDU 1540 Tunnel Warfare(线段树,记得这题是多组输入)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540解题思路:线段树维护区间左端点向右可以延伸多少,右端点可以向左延伸多少每次询问x,求出 [1,x-1] 和 [x,n] ,答案就是第一个区间的右向左+第二个区间的左向右注意这题是多组输入。重难点在query函数,这个能看懂其他地方肯定没问题了代码:#include&l...原创 2019-04-20 10:24:45 · 100 阅读 · 0 评论 -
1911 我得试着去做(欧拉函数+线段树剪枝)
题目链接:http://47.96.116.66/problem.php?id=1911解题思路:①关键在于求欧拉函数参考自 liuzibujian 的博客 浅谈欧拉函数 https://blog.csdn.net/liuzibujian/article/details/81086324几个关键结论:(1)若n是质数,f(n)= n-1证明:质数和任何小于它的数都互为质数...原创 2019-04-28 13:29:05 · 297 阅读 · 0 评论 -
POJ 3264 Balanced Lineup(线段树维护区间最大值最小值)
题目链接:http://poj.org/problem?id=3264解题思路:线段树维护一个区间的最大值,最小值,初始分别赋值为很小的负数,很大的正数代码版本1:#include<cstdio>#include<cstring>#include<algorithm>#define ll long long#define lson rt...原创 2019-04-18 22:47:22 · 285 阅读 · 0 评论 -
ZOJ 1610 Count the Colors(线段树)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=610解题思路:这是第一次写题解写的思路跟我之前写的POJ 2528差不多。https://blog.csdn.net/weixin_43768644/article/details/89341259区别是这题是要输出所有看得见的颜色,以及对应这种颜色...原创 2019-04-18 19:52:07 · 116 阅读 · 0 评论 -
HDU 1698 Just a Hook(线段树区间修改)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698解题思路:方法1:每次操作将一段区间的值都修改为同一个值,最后求整个区间的总和。看做区间修改,区间求和的模型方法2:每次将区间修改为一种颜色。看做染色与覆盖的问题。代码1:#include<cstdio>#include<cstring>#incl...原创 2019-04-17 19:22:27 · 120 阅读 · 0 评论 -
POJ 2528 Mayor's posters(线段树+离散化)
题目链接:http://poj.org/problem?id=2528解题思路:范围大,点数少,考虑用离散化1. 离散化将1-10000000的两万个点映射为1~20000具体步骤为:统计所有点->排序->去重->逐个映射其中dis数组开1000w,类型是unsigned short(16位,大小够用,且更节省空间) for (int i = 0;i<...原创 2019-04-16 20:47:32 · 122 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers(线段树+延迟标记 维护区间和)
题目链接:http://poj.org/problem?id=3468解题思路:区间修改,区间求和求和没问题,区间修改如果要一个个改那么复杂度又变回O(N),那么要这个线段树干嘛呢。所以用lazy[]数组标记,当下一次要用到被标记节点维护的子区间时,lazy会被下放,保证两个子区间的区间和正确通俗的说:用到多深,下放多深,复杂度O(logN)代码:#include<...原创 2019-04-15 20:12:03 · 128 阅读 · 0 评论 -
可持久化线段树/主席树 (P3919 + P3834)
建议先了解一下动态开点线段树,可以参考一下我写的这篇什么是可持久化线段树:若询问次数为q,维护区间为m则所需空间为O(q*logm)通过root[]数组,记录不同版本的根节点编号,我们可以方便的在某个版本上修改和查询问题1:什么是不同的版本?我在某个版本的线段树上做了某次修改,修改后的线段树,就是不同与之前的一个船新版本。问题2:为什么只要O(q*logm)?对于在...原创 2019-09-16 21:22:38 · 125 阅读 · 0 评论