10 2013 档案

摘要:题意:求树上A,B两点路径上第K小的数分析:同样是可持久化线段树,只是这一次我们用它来维护树上的信息。我们之前已经知道,可持久化线段树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表上。比如说我们从一棵树的根节点进行DFS,得到根节点到各节点的距离dist[x]——这是一个根-x路径上点与根节点距离的前缀和。利用这个前缀和,我们可以解决一些树上任意路径的问题,比如在线询问[a,b]点对的距离——答案自然是dist[a]+dist[b]-2*dist[lca(a,b)]。同理,我们可以利用可持久化线段树来解决树上任意路径的问题。DFS遍历整棵树,然后在每个节点上建立一棵线段树,某一棵线 阅读全文
posted @ 2013-10-09 20:56 z.arbitrary 阅读(2337) 评论(0) 推荐(0)
摘要:题意:完成两个操作:1.询问一个区间里第k小的数;2.修改数列中一个数的值。分析:线段树套平衡树,线段树中的每个节点都有一棵平衡树,维护线段树所记录的这个区间的元素。这样处理空间上是O(nlogn)的,因为线段树有logn层,每层的平衡树所记的节点总数都有n个。修改很容易想到,把所有包含要修改点的区间的平衡树都修改了就行了查询使用二分答案的方法// File Name: 2112.cpp// Author: Zlbing// Created Time: 2013年10月07日 星期一 18时24分39秒#include#include#include#include#include#inclu 阅读全文
posted @ 2013-10-09 18:56 z.arbitrary 阅读(1602) 评论(0) 推荐(0)
摘要:可持久化线段树也叫函数式线段树也叫主席树,其主要思想是充分利用历史信息,共用空间http://blog.sina.com.cn/s/blog_4a0c4e5d0101c8fr.html这个博客总结的挺好的!区间k大数问题对于没有修改的版本,我们可以先离散化然后对权值建树。结点存储的是该权值范围内出现元素的总次数。在线段树上找k大数时就像平衡树询问k大数一样根据结点上的信息往左或者往右走。现在可以利用函数式线段树维护权值出现数量,将数列中每个结点依次插入线段树,第r次插入后的线段树与第l-1次插入的线段树之“差”(对应结点的值相减,因为按权值建树结构是一样的)得到的线段树里进行上述的查找k大数操 阅读全文
posted @ 2013-10-06 19:26 z.arbitrary 阅读(5009) 评论(1) 推荐(0)