随笔分类 -  线段树

摘要:简述 权值线段树是线段树的一种,可以实现平衡树的基本操作,权值线段树的节点维护的是这个区间的数的出现次数,例如区间序列为1 2 2 3 3 3,那么该节点的值为6。权值线段是可以在logn的时间内求出全局的k小值,某数在全局的rank,一个数的前驱或者后继。因为是线段树的一种所以思想也是二分,其本质 阅读全文
posted @ 2020-04-07 21:07 艾尔夏尔-Layton 阅读(1076) 评论(0) 推荐(1) 编辑
摘要:简述 线段树可以维护区间信息,区间和,区间最大最小或区间gcd等,通过区间的维护我们还可以在O()的时间求出一个区间的最大子段和。 做法 首先我们线段树维护的节点变成结构体维护四个值,s为区间的和,ls为从左端点开始的最大字段和,rs为右端点开始的最大字段和,ms为区间的最大字段和。 struct 阅读全文
posted @ 2020-03-26 21:27 艾尔夏尔-Layton 阅读(772) 评论(0) 推荐(0) 编辑
摘要:综述 线段树是一颗二叉搜索树,树的每一个节点均维护着区间信息,线段树根节点的区间信息可通过左子树和右子树的信息计算出(也就是我们说的满足区间加法)。 常见的几种区间加法: 总的数字之和=左区间的数字和+右区间的数字和 总的gcd=gcd(左,右) 总的数字乘积=左区间乘积*右区间乘积 总的最大值=m 阅读全文
posted @ 2020-03-24 17:49 艾尔夏尔-Layton 阅读(714) 评论(0) 推荐(1) 编辑
摘要:题意:给你一个初始为空的集合,对其进行5种操作若干遍,输出最终的集合。 设S为一开始的集合,则: U T 表示 S=S∪T I T 表示 S=S∩T D T 表示 S=S-T C T 表示 S=T-S S T 表示 S=S异或T 思路:用线段树模拟区间操作,叶子结点为1代表区间存在,0代表不存在,因 阅读全文
posted @ 2020-01-13 20:19 艾尔夏尔-Layton 阅读(148) 评论(0) 推荐(1) 编辑
摘要:题意:给你一个长为n的序列,给定q次查询区间,若l==r,输出A[ l ],若区间长度不为一,输出区间最左边的数一直模一直模模区间的右边,一直到区间右端点。 方法1:对于一个数而言,模比他大的数等于它本身,所以取模操作只对比它小的数有意义,所以我们对于一个区间,若长度不等于0,若是能快速求出有哪些数 阅读全文
posted @ 2020-01-10 15:41 艾尔夏尔-Layton 阅读(172) 评论(0) 推荐(0) 编辑
摘要:题意:一个长度为n的序列(记为A[i]),q次查询,每次输出查询区间内任意一个只出现一次的数字,没有则输出0。 思路:线段树结点存元素的位置和上一个相同元素出现过的位置(没有则为0,记为pos),线段树维护区间结点最小值,结点封装在pair里,第一key值为前一个相同元素出现的位置,先将查询存下来, 阅读全文
posted @ 2020-01-03 20:20 艾尔夏尔-Layton 阅读(455) 评论(0) 推荐(1) 编辑
摘要:传送门:https://vjudge.net/contest/349835#problem/A 题意 长度为n的序列代表每个房间的灯泡需求,k为每个月新获得的灯泡,从左往右找当手头的灯泡>=房间的需求时为房间更换灯泡,若没有房间满足则留着下一个月用,q次询问,回答在第i个月装修了多少个房间,手头上的 阅读全文
posted @ 2020-01-03 19:57 艾尔夏尔-Layton 阅读(186) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> #include<algorithm> using namespace std; const int maxn=5e5+10; typedef long long ll; int n,m; struct node{ ll ls,rs,ms,s; }a[maxn< 阅读全文
posted @ 2020-01-02 16:27 艾尔夏尔-Layton 阅读(118) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示