主席树专题

POJ  2104 K-th Number

题意:求区间第k小

思路:主席树模板题

SPOJ  COT  Count on a tree

题意:树上第k小

思路:节点以父节点为last版本建树,然后推计算树上第k小公式,要用在线求lca算法,推荐树链剖分求lca

HDU  5919  Sequence II

题意:给你n个数的数组,q给询问,每次询问区间l,r中每个数第一次出现的位置的第(k+1)/2大(答案是位置),k为区间l,r中不同数的个数,要求在线;

思路:从后向前建立n颗线段树,如果从后向前那个数第一次出现,pos[a[i]]=i;在i这个位置的值加1

如果从后向前那个数不是第一次出现,先将a[i]最后出现的那个位置pos[a[i]]-1,然后i这个位置+1,pos[a[i]]=i;

1 1 2 2 3 3  ->   最后一颗树的效果  1 0 1 0 1 0;第3课树的效果(在i为4的位置)0 0 0 1 1 0;

求区间l,r不同数的个数,查询第i==l建的那颗数就好了,然后查询i==l的区间第(k+1)/2大位置;

hdu 6621 K-th Closest Distance(二分答案)

题意:给n个数的数组,q次询问,每次询问给一个l,r,p,k,求区间l,r中 |a[i]-p|(l<=i&&i<=r)中第k小

思路:这个题目a[i]不是很大,不用离散化,在主席树中二分答案p-mid,p+mid即可(比赛时被k迷惑了,暴力枚长度为k的区间也卡过去了,但是超时太多了。。。。)

CodeForces  538F A Heap of Heaps

题意:给n个数的数组,求这n个数构成的完全m叉树的儿子节点的权值小于父亲节点(直接相连的才叫父节点)权值的数量;其中1<=m<=n-1,输出n-1个数;

思路:会发现完全m叉树的非叶子节点数量为 n/m; 也就是说叶子节点很多 ,我们要计算有儿子节点的节点,m==1特殊计算,先枚举m(2~n-1, 1)计算左端点 i*j-i+2,右端点 i*j-i+2+i-1(和左端点相差i-1)  其中i表示i叉树,j表示以j为根的子树;用主席树求l,r小于a[j]的数量即可;        主要是要发现完全m叉树的非叶子节点数量为 n/m; 那么复杂度为 n/1+n/2+n/3+..+n/(n-1) 复杂度为n*log(n),(嘻嘻,不会证明,算法竞赛进阶指南上面有说为n*logn);

CodeForces 484E Sign on Fence(动态开点可持久化线段树)

题意:给一个n个数的数组hi,q个询问每个询问给出l,r,w 求区间l,r中,连续的w个数>=x ;x最大值;

思路:当考虑x时,将<x的为0,>=x的为1 最后判断是否可行,线段树区间合并的板子,但是这个题目是二分答案找x,但是每次二分答案的x都要建线段树  考虑到x只会是h[i] 那么就将每个高度建一颗线段树,二分答案x时直接利用即可;那么怎么将每个h[i]建线段树呢,先将h[i]离散化,利用可持久化思想建线段树即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值