随笔分类 -  线段树

摘要:题意 在三维空间中给你n个长方体,求空间中被这些长方体覆盖至少3次以上的区域的总体积。 思路 这题没给数据组数T的范围,大致看了一下其他人的都是枚举z来做的,所以我这边也是同样的做法转换成二维的扫描线来做,数组ci表示区间i被覆盖ci次的标记,具体扫描线怎么实现可以看我上篇博客。 1 #define 阅读全文
posted @ 2024-06-12 19:42 Venux 阅读(54) 评论(0) 推荐(1)
摘要:Problem - 1255 (hdu.edu.cn) 题意 在二维平面坐标轴上输入n个矩形,问被这n个矩形覆盖了两次或两次以上的区域的面积总和。 给的题意有点问题,实际输入是矩形的左下和右上,另外样例1应该输出7.62. 思路 扫描线,这里是沿着x轴正方向每次用一条垂直于x轴的直线去扫,离散化y坐 阅读全文
posted @ 2024-06-12 08:32 Venux 阅读(25) 评论(0) 推荐(0)
摘要:思路 题目中不相邻子序列和的最大值是满足加和性质的,考虑使用线段树,这里我用了4颗线段树,sum[o][l][r]中l=0和l=1分别表示当前区间是否选取左端点作为子序列的一部分,r=0和r=1分别表示当前区间是否选取右端点作为子序列的一部分。接下来就是线段树单点更新。 1 #define IO s 阅读全文
posted @ 2024-05-28 22:42 Venux 阅读(73) 评论(0) 推荐(0)
摘要:3117. 划分数组得到最小的值之和 - 力扣(LeetCode) 思路 对于这种划分区间段的问题,通常我们可以先考虑dp,dp[i][j]表示第i个num数作为第j段最后一个元素得到的前j段的最小和。用二分去查找合法区间的左右端点,因为m最大为10,考虑使用10颗线段树(用RMQ也可以)去维护区间 阅读全文
posted @ 2024-05-25 00:09 Venux 阅读(65) 评论(0) 推荐(0)
摘要:Problem - 4027 (hdu.edu.cn)许多邪恶的战舰在战斗前排成一排。我们的指挥官决定使用我们的秘密武器来消灭战列舰。每艘战列舰都可以标记为耐力值。对于我们秘密武器的每一次攻击,它都可能降低连续部分战列舰的续航能力,使它们的续航力达到其原始续航力值的平方根。在我们的秘密武器的一系列攻 阅读全文
posted @ 2024-05-20 21:42 Venux 阅读(58) 评论(0) 推荐(0)
摘要:https://codeforc.es/contest/1217/problem/E 建立9棵数位线段树维护区间最小值和次小值,建议用struct建树方便进行区间合并 阅读全文
posted @ 2019-09-08 21:22 Venux 阅读(202) 评论(0) 推荐(0)
摘要:https://codeforc.es/contest/1208/problem/D 线段树维护从1到n的前缀和,从后往前查询第一个前缀和大于ai的位置,线段树简单操作我竟然没当场写出来555 阅读全文
posted @ 2019-08-28 15:03 Venux 阅读(260) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=6638 先离散化坐标,枚举上下边界,线段树维护区间最大连续字段和。 阅读全文
posted @ 2019-08-09 13:13 Venux 阅读(304) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=6070 题解 首先不难看出错误率是单调的,那么我们可以直接二分答案x,某个区间的错误率=区间数的种类cnt/区间长度r-l+1,变成:cnt+l*x<r*x+x;然后枚举区间区间右端点r,当前点影响的区间是le[i 阅读全文
posted @ 2019-04-28 18:44 Venux 阅读(179) 评论(0) 推荐(0)
摘要:http://www.51nod.com/Challenge/Problem.html#!#problemId=1571 题解 题目要求的最近点对不太符合区间加合性,所以不能直接用线段树在线做。 我们可以先把数据离散化,求出当前点左边离他最近的点的位置,从左到右扫一遍,更新当前点的距离,然后回答以当 阅读全文
posted @ 2019-04-26 21:52 Venux 阅读(212) 评论(0) 推荐(0)
摘要:http://www.51nod.com/Challenge/Problem.html#!#problemId=1781 题解 核心问题:漏斗从1到n都必须覆盖到,用到dp思想:分别从左往右和从右往左算出小球移动到当前漏斗的最少花费,最后再减去重复的最后一支漏斗的花费更新答案。 具体:把列离散化,然 阅读全文
posted @ 2019-04-25 21:45 Venux 阅读(156) 评论(0) 推荐(0)
摘要:http://www.51nod.com/Challenge/Problem.html#!#problemId=1494 题解 一开始有start个人投自己,num表示当前已经收买了多少人,从大到小枚举自己以i张票当选,那么其他人的票数一定要小于i,拿钱收买他们花费最少的>=i的这部分人,再加上另外 阅读全文
posted @ 2019-04-23 10:41 Venux 阅读(234) 评论(0) 推荐(0)
摘要:http://www.51nod.com/Challenge/Problem.html#!#problemId=1766 题解 首先要知道一个结论:两个区间的最远点对一定由各自区间的最远点对里的点组成。 然后就好做了,dfs建序然后求出欧拉序,然后打st表,通过lca求树上两点距离,然后在欧拉序上建 阅读全文
posted @ 2019-04-22 19:41 Venux 阅读(262) 评论(0) 推荐(0)
摘要:51Nod 1364 最大字典序排列 抱歉博客两天没更新。今天被数据挖掘老师挂科警告,再也不敢上课划水了,好怕毕不了业啊,为什么大佬们那么强还可以保持gpa,我acm这么菜,怎么学业还出问题了呀,感觉人跟人之间的区别真的比人跟狗的区别还大。 题解 那么我们从左往右依此确定当前位置应该为什么数,现在要 阅读全文
posted @ 2019-04-10 20:16 Venux 阅读(247) 评论(0) 推荐(0)
摘要:http://www.51nod.com/Challenge/Problem.html#!#problemId=1199 又wa了一下午。。。 思路 树的先序遍历顺序刚好对应线段树的一个区间,利用这一点直接dfs建序,然后再建线段树来查询修改就可以了。 阅读全文
posted @ 2019-04-07 18:49 Venux 阅读(165) 评论(0) 推荐(0)
摘要:妈的调了两天终于过了。。。我好菜啊。 题意 对长度为n的序列执行q种操作, 0:把区间内的值都置为0; 1:把区间内的值都置为1; 2:把区间内的0都置为1,区间内的1都置为0; 3:查询区间里1的个数; 4:查询区间里最长的连续为1的区间的长度; 题解 显然,线段树区间更新区间查询可解此题,具体是 阅读全文
posted @ 2019-04-06 15:07 Venux 阅读(205) 评论(0) 推荐(0)
摘要:众所周知,懒标记是线段树解决区间更新问题的利器。 本人学习懒标记的时候,找了网上一大堆博客看,但是少有人解释具体细节,导致浪费了很多时间才彻底理解。 好了,回顾一下整个过程:区间更新时,我们递归查找目标区间的子区间,过程中不断维护当前节点的信息(要求的信息,比如区间和),每找到一个目标区间的子区间( 阅读全文
posted @ 2019-04-04 12:43 Venux 阅读(1357) 评论(2) 推荐(0)
摘要:题意 q种操作,查询区间内最长连续上升子序列的长度,或者修改某个点的值 题解 线段树维护:区间内最长连续上升子序列的长度sub、区间内以左端点为起点的最长连续上升子序列的长度lsub、区间内以右端点为终点的最长连续上升子序列的长度rsub、区间左端点的值l和右端点的值r。 阅读全文
posted @ 2019-03-30 11:34 Venux 阅读(245) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题意 在矩形广告牌上塞广告,每个广告宽为w高为1,规则从上至下,从左至右塞,塞不进去输出-1 思路 对广告牌高度建线段树,维护高度区间剩余宽度最大值,线段树查找可以塞的位置,并更新那个位置的剩余宽度,注意到 阅读全文
posted @ 2019-03-27 13:37 Venux 阅读(159) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1754 题意 中文题面不解释 思路 就是一个单点更新求区间最值的裸题,给新手入门线段树比较好,有什么问题留言吧。 阅读全文
posted @ 2019-03-27 11:05 Venux 阅读(112) 评论(0) 推荐(0)