![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
主席树
Bahuia
软件工程博士
展开
-
HDU 2665 主席树(求区间第k大模板)
题意:给出一串长度为n的序列,并给出m个询问,每个询问针对序列中一段区间[s,t],求这区间中第k小的数字是多少。思路:非常经典的主席树问题。 主席树正规的名字是可持久化线段树,形象来说就是将线段树更新的每一个步骤都保存下来,但是如果每次都开一棵线段树显然会MLE,主席树就是利用了更新一步前后的两棵线段树存在大量的重复元素,因此将公用的节点保留,只增加新的节点。 通过对线段树的了解,很明显知道更原创 2017-08-23 18:36:26 · 2936 阅读 · 0 评论 -
HDU 6162 主席树+LCA(树上求区间[a,b]中的个数)
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6162 给出一棵树,每个结点有一个权值,然后给出若干询问,针对询问区间(u,v,L,R),求在结点u和v的路径上,权值大小在[L,R]中的结点权值总和是多少。思路:其实思路和SPOJ COT差不多,传送门:http://blog.csdn.net/bahuia/article/details/77原创 2017-08-24 10:51:36 · 516 阅读 · 0 评论 -
SPOJ COT 主席树+LCA(树上第k大)
题意:题目链接:https://vjudge.net/problem/SPOJ-COT 对于给出的一棵树,给出若干询问,问任意两个节点的路径上第k小的节点的权值是多少?思路:主席树的另一种经典问题。 看似与HDU 2665不同,这里是针对树结构,其实思路基本不变。只是在建立主席树的时候,需要根据树的父子关系来构造,也就是节点u的线段树要在u的父亲基础上构建。 另外,在寻找第k大时,需要考虑x到原创 2017-08-23 18:43:05 · 534 阅读 · 0 评论 -
HDU 4417 主席树
题意:题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4417 给出n个数和m个询问,询问区间[L,R]中小于等于k的数有多少。思路:常见的主席树思路; 但是在处理区间[L,R]的离散化时没有考了离散之后L大于R的情况,结果一直莫名其妙MLE了很久。代码:#include <bits/stdc++.h>using namespace s原创 2017-10-01 20:23:36 · 482 阅读 · 0 评论 -
SPOJ DQUERY 离线树状数组or主席树
题意:题目链接:http://acm.sdibt.edu.cn:8080/vjudge/problem/viewProblem.action?id=13725 给出n个数,问区间[L,R]中有多少不同的数。思路:经典题。 可以离线+树状数组,离线保存查询,按照r排序,用last数组保存每个数最接近当前询问r的位置。 也可以主席树,从右到左建树,pos保存每个数字的当前最左位置,每次在新版本的线原创 2017-10-01 22:34:58 · 468 阅读 · 0 评论 -
HDU 5919 主席树
题意:题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5919 给出n个数字,q个询问,询问在[L,R]区间内,如果有k个不同的数字,那么第(k+1)/2个数字第一次出现的下标是多少。思路:一开始以为和spoj的那题一样,只要主席树计算区间种类数,然后二分即可,但是一直T。 其实不用二分,如果按照计算种类数的方式建立可持久化线段树,那么每原创 2017-10-02 10:03:13 · 661 阅读 · 0 评论 -
HDU 4605 主席树
题意:题目链接:http://acm.split.hdu.edu.cn/submit.php?pid=4605 一棵二叉树,根节点为1,每个节点都有一个权值,给出q个询问,每次询问给出v和x,问数字x从根节点落下,到节点v的概率是多少。 其中数x假如到达一个节点u: 1. 如果x==w[u],则x留在该节点。 2. 如果x>w[u],则x有1/8概率往左子树走,有7/8概率往右子树走。 3原创 2017-10-03 20:41:55 · 484 阅读 · 0 评论