摘要: 题意:求树上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 阅读(2326) 评论(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 阅读(1596) 评论(0) 推荐(0) 编辑