随笔分类 - 线段树
摘要:题面传送门 这道题我们首先会想到处理中位数的常见方法: 二分枚举答案ans,将大于ans的数变为1,小于的则变成-1;如果这个区间的和大于1,则说明中位数比枚举的答案要大,否则要小; 但是这道题的区间并不确定,难道我们要n*n枚举?肯定不行; 观察性质,我们发现,对于区间[b,c],我们肯定要选择,
阅读全文
摘要:题面 我们寻找一个东西总是比判断一个东西复杂,对吧; 那么就转化思路:如果我们知道等差数列的中间项mid,那么就是寻找一对数(l,r),使得abs(mid-l)==abs(mid-r),且l<mid<r; 可以枚举每个数作为中间项,然后O(n)的判断是否存在这样的数对(l,r); 但这是O(n^2)
阅读全文
摘要:题面 首先你要知道题问的是什么:使用一种数据结构,动态地维护以1为起点地最长上升子序列(把楼房的高度转化成斜率地序列)的长度; 怎么做?线段树! 我们在线段树上维护两个东西:1.这个区间内斜率的最大值 2.从这段区间开头可以看到的区间内的所有楼房 初始化:对于每一个叶子节点,从这段区间头可以看到的楼
阅读全文
摘要:题面 这道题咋看都是无法从dp入手,那么就从数据结构入手!; 首先你要会权值线段树和线段树合并。 然后你要知道: 对于任意一个节点,交换左右子树对当前节点和前面的所有节点没有影响。 因为这是前序遍历:根节点->左子树->右子树。可以看到,交换左右子树对前面的节点无影响。 我们清楚,交换子树只会对该逆
阅读全文
摘要:【问题描述】 Mark Douglas是一名优秀的锻造师。与他优秀的锻造水平不相符,他非常穷,以至于很多好刀都因为缺少素材缺少资金无法打造。 Mark把他有能力锻造的所有n种刀建成了一棵锻造树,除了第1种刀可以直接打造以外,其他的刀都只能从某一种刀加工而来。具体而言,第i种刀只能从第fai种刀加工而
阅读全文
摘要:题面 挺好的一道树剖模板; 首先要学会最模板的树剖; 然后这道题要注意几个细节: 初始化时,seg[0]=1,seg[root]=1,top[root]=root,rev[1]=root; 在线段树上进行操作时,要使用lazy标记; 对于一个以x为根的子树,它子树中所有的元素一定时在线段树上连续的区
阅读全文
摘要:题面 注意一个细节,查询和更新都需要pushdown();
阅读全文
摘要:题面 貌似这道题暴力加玄学优化就可以AC? 下面是正解: 1.树链剖分: 我们在u到v之间都放一个糖果,可以将松鼠它家u到v的糖果数都加1。每一次将a[i]到a[i+1] (a数组是访问顺序)的节点加1,可以用树链剖分来维护。查询只需要查每个点的权值就可以了。(貌似该题比树剖板子还板子?) 2.树上
阅读全文

浙公网安备 33010602011771号