摘要:
学习博客: http://noalgo.info/476.html 讲的很清楚! 对于一颗树,dfs遍历时,先向下遍历,并且用并查集维护当前节点和父节点的集合。这样如果关于当前节点(A)的关联节点(B)(及要求的最近祖先的另一个点)之前被访问过,那么 B可定已经属于一个集合,先前对于访问过的点,已经 阅读全文
摘要:
比较基本的操作。 阅读全文
摘要:
好题,错了不知道多少遍。这题其他几个操作都是比较经典的,多了一个最大子序列的。这时候对于当前的区间,最大子序列,可能使左区间的最值,可能是右区间的最值,也可能是整个区间的。所以维护lx[],rx[],mx[]。lx[rt] = max(lx[l],sum[l]+key[rt]+max(0,lx[r] 阅读全文
摘要:
对于区间旋转使用lazy思想就能解决。然后对于区间搬移,先把a-1结点做根,b+1作为它的右孩子,这样ch[ch[root][1]][0]就是区间[a,b],现将他取出。 然后在将当前的树伸展,把c结点转到根,c+1作为它的右孩子,这样c+1结点的左孩子就是空的,直接将上次取出的作为c+1结点的做孩 阅读全文
摘要:
好题。我做了很久,学了大牛们的区间搬移。主要的代码都有注释。 阅读全文
摘要:
对于大神来说这题是水题。我搞这题花了快2天。 伸展树的优点有什么,就是树不管你怎么旋转序列是不会改变得,并且你要使区间反转,只要把第k大的点转到根结点,那么它的左子树就是要交换的区间[l,r),然后交换左右 子树就可以了(中序),根结点的位置就是i+siz[ch[root][0]],i是处理完的结点 阅读全文
摘要:
用splay做了一遍。 建树时是按照数列序号从小到大排好的,每个节点左子树的序号小于右子树的序号及这个节点本身。由于查询[l,r]要伸展l-1,r+1所以我们要多加2个结点,保证边界处理时不出问题。由于这样每次查找l-1时,要找的应该是l(r+1也是找r+2)。 阅读全文
摘要:
对于当天的营业额,你要找到之前的数和他差的绝对值最小的和。由于这个是不断在插入的,所以用伸展树来维护。 http://www.lydsy.com/JudgeOnline/problem.php?id=1588 照着kuangbin大牛的代码敲下来的。 阅读全文
摘要:
学习的博客 网址:http://dongxicheng.org/structure/splay-tree/ http://blog.csdn.net/acm_cxlove/article/details/7815019 http://blog.csdn.net/leolin_/article/det 阅读全文
摘要:
树链剖分的第一题,易懂,注意这里是边。 阅读全文