
线段树
FrostMonarch
这个作者很懒,什么都没留下…
展开
-
codeforces 1354D - Multiset (线段树或者2分)
题目大意:已知一个数列an,我们每次可以添加一个数k,或者把第k大的数字去掉。问我们经过k次操作后,数列中任意1个剩余的数字。n,q<=1e6解题思路:首先最简单的思路是线段树。线段树我们可以在每一个叶子节点用数字表示这个区间有多少个数字比如an:1 1 1我们的区间[1:1]就是3。然后做一个区间求和树即可。单点修改就在对应位置加1,去掉数字的话,我们就询问一下子节点中的左右节点,若左节点的和大于我们需要取出的第k个数,我们就往左走,否则k-=left_tree[root](表示我们原创 2020-05-22 20:06:39 · 204 阅读 · 0 评论 -
非常简单好用的线段树板子(包括懒标签log(n)更新区间,区间求和,区间求最大值,区间求最小值)
写了一个线段树的板子,包含了区间的求和,求最值,具体使用方法就是调用那个segmentTree类然后定义对象,调用build tree,然后就可以愉快的使用啦。具体使用步骤可以在main函数使用。复制粘贴的时候不要忘记把#define left(x) (x<<1)#define right(x) ((x<<1)+1)也粘贴走哦。嘻嘻:)#include ...原创 2019-12-12 11:47:47 · 283 阅读 · 0 评论 -
kickstart round H h-index(线段树)
题目大意:在数列An中,问是否存在一个最大的H,使得An中恰好有比H多个大于H的数字存在。这题比较难的一点是,它会不断增加数字,每增加一次需要再找一个H。解题思路:假如这里没让我们增加数字的话,显然一个排序再加一个二分查找就完成了。但是这里N的规模高达1e5,所以不允许使用n^2的算法。但是我们发现每个数字小于等于1e5,这时候我们需要想到在值域中建模。什么意思呢?每次多一个数,我...原创 2019-11-19 20:55:47 · 221 阅读 · 0 评论 -
洛谷 P3373 模板 线段树2(线段树 懒惰传播)
题目大意:有一串数an,允许对任一个区间做加法还有乘法,问某个区间的求和。例如:1 2 3 4 5进行操作[1,3]加1数列变为:2 3 4 4 5进行操作[1,5]乘2数列变为:4 6 8 8 10现在问[1,5]求和。输出:36解题思路:数据量n=1e5 ,操作数m=1e5,暴力是万万不得。不用懒惰传播复杂度为O(n^2),妥妥tle...原创 2019-10-27 14:02:18 · 395 阅读 · 0 评论 -
codeforces 569 div1 Serge and Dining Room(线段树 懒惰传播)
题目大意:有n个价格的菜,有m个人去买菜,这m个人排队去买,每个人都尽可能去买最贵的菜,题目有q次询问,每次都可能会改n个菜中的某个菜的价格,或者更改m个人中的某个人的钱。问,当m个人买完后,你可以买的最贵的菜是哪个。若其中一个学生买不了菜,他会退出队列。数据范围:菜的价格<=1e6 , q<= 3e5 , m,n<= 3e5.题解思路:通过观察,我们发...原创 2019-07-07 13:58:33 · 284 阅读 · 0 评论 -
codeforces 576 div2 Welfare State(线段树,懒惰传播)
题目大意:有一个数列an,我们要执行任一如下操作q次,操作一:每次当数列中的值小于k时,所有小于k的值换为k。操作二更新第n个数。数据范围:n<=1e5 q<=1e5解题思路:使用线段树,其中操作二是和一般线段树参不多,因为线段树单点更新的复杂度为log(n),但是操作一假如没搞好,复杂度会达到n*log(n)*m,最后喜提TLE。这时候我们就要考虑懒惰...原创 2019-07-31 16:03:07 · 182 阅读 · 0 评论 -
atcoder beginner contest 137 Summer vacation (线段树,贪心)
题目大意:有两个数列,Ai和Bi,已知有M天,我们每天可以选择并完成第i个任务,那么Ai-1天后我们有报酬Bi。问在M天里面 我们最多获得多少报酬,包含第M天。解题思路:长得有点像背包,但是假如用背包我们发现无法对不选择任务进行建模,遂放弃背包DP。其实这题我们可以应用贪心。我们每天都可以选择任务,为什么不尽量选报酬大的呢,所以考虑把报酬从大到小排序。若这个任务能接下,我们就接...原创 2019-08-10 23:44:42 · 304 阅读 · 0 评论