随笔分类 - 线段树
摘要:题目来源 LeetCode_53 题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组
阅读全文
摘要:油漆面积 PREV-38 解法一:使用线段树和扫描线模板求解: 一个比较好的关于扫描线和线段树的总结模板:原文链接:https://blog.csdn.net/tomorrowtodie/article/details/52048323 问题:给出若干个矩形,(给的是矩形左上角和右下角坐标),求最后
阅读全文
摘要:除法 "201709 5" 这道题有很多种方法来做,最常用的就是线段树和树状数组。 如果使用线段树来做,就会想到区间修改的update函数。但是这里可能会涉及到v是1或者a[j]是0的情况,所以用这种方法会超时,最多50分。 可以修改一下代码,使用点修改来做这道题。在main函数里面增加一个循环,用
阅读全文
摘要:Tunnel Warfare "HDOJ 1540" 这题关于线段树的操作有一定的难度,需要较好的思维能力。 关于题目的详细解答已经在代码中体现了。
阅读全文
摘要:Can You answer these queries? "HDOJ 4027" 这道题目和前面做的题目略有不同。以前的题目区间更新的时候都是统一更新的,也就是更新相同的值。但是这里不一样,这里更新的每个叶子结点改变不同。 考虑到数字最大也就64位,所以就算加上开根号的操作,也就最多开7次,所以这
阅读全文
摘要:Mayor's posters "POJ 2528" 本题是线段树的区间更新和离散化的结合。 代码中需要注意的就是这里要加入一个去重的操作。而且我这里建树的时候是从1开始的,所以下标的问题要注意。 还有一个需要注意的地方就是根据题目的意思在离散化之后,可能会出现一个问题,就是[1,10],[1, 4
阅读全文
摘要:A Simple Problem With Integers "POJ 3468" 这题是区间更新的模板题,也只是区间更新和区间查询和的简单使用。 代码中需要注意的点我都已经标注出来了,容易搞混的就是update函数里面还需要计算sum数组。因为这里查询的时候是直接用sum查询结点。 //区间更新,
阅读全文
摘要:I Hate It "HDOJ 1754" 1. 这道题是线段树简单的入门题,只是简单考察了线段树的基本使用,建树等操作。 2. 这里需要注意的是输入要不使用scanf要不使用快速输入。 3. 这里的maxs数组需要开大一点,4倍是最稳妥的,一定不会溢出。 4. 区间查询的时候要注意if后不是之间使
阅读全文
摘要:Rikka With Cake "HDOJ 6681" 1. 最终的答案为射线的交点数加一。当然,我们也可以证明。证明需要用到欧拉公式 V−E+F=2 V E+F=2V−E+F=2 。设射线的交点共 c cc 个。则在这个图中,V=K+4+K+c=2K+c+4 V=K+4+K+c=2K+c+4V=K
阅读全文
摘要:K th Closest Distance "HDOJ 6621" 本题可以使用线段树解决,结点存本结点对应的所有元素,并按照从小打到排序 最后使用二分法求解答案。因为题目中有绝对值,所以需要使用两次查找,再相减和k比较 // include include include include incl
阅读全文