随笔分类 - 数据结构——线段树
摘要:题目传送门 考虑用线段树进行区间求和,暴力修改。 我们发现开根号操作并不能直接像加减一样直接修改,但是他有一个非常良好的性质,对于一个小于等于1e12的数,其进行下取整开根操作至多不超过6次就可以到1,对于1,我们显然不需要进行任何操作,因此修改的复杂度是O(nlogn),数据只有1e5,因此不用在
阅读全文
摘要:NOIP2012提高组D2T2。 这道题目非常基础,正解貌似是二分+差分数组,在这里提供一种线段树的思路。 很容易发现题目让我们每次修改一段区间,然后我们只需要看每一个区间内有没有负数就可以了。可以用线段树维护每个区间内的最小值,修改的话就直接减就可以了,不要忘了标记下放(否则只有5分...)最后查
阅读全文
摘要:树链剖分用来解静态树上维护路径信息的问题,例如:给定一颗点带权的树,每次去修改某条路径上所有点的点权,或是求某条路径上的点权之和,当这棵树的形态为一条链时,这实际上就是一个区间修改求和的问题,可以用线段树等数据结构方便地求解。对于其他的情况,由于树的形态不变,因此树链剖分的策略是把这棵树恰当的剖分为
阅读全文
摘要:题目传送门 这道题需要解决的是区间求值和单点修改,可以用线段树求解,首先构造一颗[1,m]的“空树”(序列至多有m个数),即每个节点维护的信息均为0,新建一个变量sum表示序列中实际数的个数,每次修改第sum个节点,最后n个数就是[sum-n+1,sum],简单维护即可。 下面给出参考代码: 1 #
阅读全文
摘要:题目传送门 评分:省选/NOI-,难度:普及+/提高 这题真的和RMQ没有半点关系,只需要一个裸的线段树,连pushdown都不需要,只需要两种操作:区间修改和区间求最小值,在回溯时加上标记即可,唯一有点思维含量的是对环的处理,如果左端点大于了右端点,就维护(l,n)(1,r),否则正常维护即可,不
阅读全文
摘要:一、前言 对于维护区间连续和问题,我们已经学了很多种算法和数据结构,在规定n<=100000,m(操作数)<=200000,内,暴力算法可以解决单点修改,单点求值。前缀和算法可以解决区间求和问题,而最近学的树状数组可以解决单点修改,区间求和的问题。而当我们需要区间修改时,上边的三种算法都将失效,我们
阅读全文