[POJ2104/HDU2665]Kth Number-主席树-可持久化线段树
Problem Kth Number
Solution
裸的主席树,模板题。但是求k大的时候需要非常注意,很多容易写错的地方。卡了好久。写到最后还给我来个卡空间。
具体做法参见主席树论文《可持久化数据结构研究》。
AC Code
#include "cstdio"
#include "iostream"
#include "cstring"
#include "algorithm"
using namespace std;
int T,a[],root[],b[],l,r,k,tot;
struct discre{
int num,sum;
}dctz[];
struct tree{
int lc,rc,sum;
}tr[*];
bool cmp(discre a,discre b){
return a.sum<b.sum;
}
void build(int now,int l,int r){
int mid=(l+r)/;
tr[now].sum=;
if(l==r){
return;
}
tr[now].lc=++tot;
build(tot,l,mid);
tr[now].rc=++tot;
build(tot,mid+,r);
}
void insert(int last,int sum,int l,int r){
tr[++tot]=tr[last];
tr[tot].sum++;
int x=tot;
if(l==r){
return;
}
int mid=(l+r)/;
if(sum>mid){
tr[tot].rc=tot+;
insert(tr[last].rc,sum,mid+,r);
}else{
tr[tot].lc=tot+;
insert(tr[last].lc,sum,l,mid);
}
}
int search(int k,int l,int r,int lx,int rx){
if(lx==rx){
return lx;
}
int mid=(lx+rx)/;
int x=tr[tr[r].lc].sum-tr[tr[l].lc].sum;
if((x>=k))return search(k,tr[l].lc,tr[r].lc,lx,mid);
else return search(k-x,tr[l].rc,tr[r].rc,mid+,rx);
}
int main(){
freopen("chairmantree.in","r",stdin);
scanf("%d",&T);
while(T--){
memset(tr,sizeof(tr),);
memset(a,sizeof(a),);
memset(dctz,sizeof(dctz),);
memset(root,sizeof(root),);
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
dctz[i].sum=a[i];
dctz[i].num=i;
}
sort(dctz+,dctz+n+,cmp);
for(int i=;i<=n;i++)a[dctz[i].num]=i,b[i]=dctz[i].sum;
tot=;
root[]=;
tr[].sum=;
build(,,n);
for(int i=;i<=n;i++){
root[i]=tot+;
insert(root[i-],a[i],,n);
}
for(int i=;i<=m;i++){
scanf("%d%d%d",&l,&r,&k);
int x=search(k,root[l-],root[r],,n);
printf("%d\n",b[x]);
}
}
}
[POJ2104/HDU2665]Kth Number-主席树-可持久化线段树的更多相关文章
- 主席树||可持久化线段树+离散化 || 莫队+分块 ||BZOJ 3585: mex || Luogu P4137 Rmq Problem / mex
题面:Rmq Problem / mex 题解: 先离散化,然后插一堆空白,大体就是如果(对于以a.data<b.data排序后的A)A[i-1].data+1!=A[i].data,则插一个空 ...
- [BZOJ 4771]七彩树(可持久化线段树+树上差分)
[BZOJ 4771]七彩树(可持久化线段树+树上差分) 题面 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i] ...
- 主席树[可持久化线段树](hdu 2665 Kth number、SP 10628 Count on a tree、ZOJ 2112 Dynamic Rankings、codeforces 813E Army Creation、codeforces960F:Pathwalks )
在今天三黑(恶意评分刷上去的那种)两紫的智推中,突然出现了P3834 [模板]可持久化线段树 1(主席树)就突然有了不详的预感2333 果然...然后我gg了!被大佬虐了! hdu 2665 Kth ...
- 归并树 划分树 可持久化线段树(主席树) 入门题 hdu 2665
如果题目给出1e5的数据范围,,以前只会用n*log(n)的方法去想 今天学了一下两三种n*n*log(n)的数据结构 他们就是大名鼎鼎的 归并树 划分树 主席树,,,, 首先来说两个问题,,区间第k ...
- 权值线段树&&可持久化线段树&&主席树
权值线段树 顾名思义,就是以权值为下标建立的线段树. 现在让我们来考虑考虑上面那句话的产生的三个小问题: 1. 如果说权值作为下标了,那这颗线段树里存什么呢? ----- 这颗线段树中, 记录每个值出 ...
- BZOJ4771七彩树——可持久化线段树+set+树链的并+LCA
给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节 点的颜色为c[i].如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色.定义dept ...
- [TS-A1505] [清橙2013中国国家集训队第二次作业] 树 [可持久化线段树,求树上路径第k大]
按Dfs序逐个插入点,建立可持久化线段树,每次查询即可,具体详见代码. 不知道为什么,代码慢的要死,, #include <iostream> #include <algorithm ...
- BZOJ.4771.七彩树(可持久化线段树)
BZOJ 考虑没有深度限制,对整棵子树询问怎么做. 对于同种颜色中DFS序相邻的两个点\(u,v\),在\(dfn[u],dfn[v]\)处分别\(+1\),\(dfn[LCA(u,v)]\)处\(- ...
- BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...
- BZOJ 3439 Kpm的MCpassword Trie树+可持久化线段树
题目大意:给定n个字符串,对于每一个字符串求以这个字符串为后缀的字符串中第k小的编号 首先将字符串反转 那么就变成了对于每一个字符串求以这个字符串为前缀的字符串中第k小的编号 然后考虑对字符串排序 那 ...
随机推荐
- mybatis xml配置文件要点说明
mapper映射方式: 1 一一具体列举的方式 2扫描package 如: <mappers> <!-- 告知映射文件方式1,一个一个的配置 <mapper resource= ...
- 跨域请求,jsonp
其实跨域请求,只需要在请求的url后面加上callback=?即可. 提供以下两种获取跨域的ajax的写法,都是基于jQuery.都已经成功使用,兼容做到ie7,(ie6未测试);案例地址来自豆瓣开放 ...
- [Leetcode] Binary search--436. Find Right Interval
Given a set of intervals, for each of the interval i, check if there exists an interval j whose st ...
- Eclipse汉化后如何还原为EN英文(实用技巧) --转
自从那天脑袋短路后,下了个汉化包将Eclipse给汉化了,用的我真TMD的不习惯,一直想还原为EN文,试了好多办法,删文件,汉化包,改eclipse.ini文件中的"-nl zh" ...
- redis bitcount variable-precision swar算法
花了不到一周的时间看完了一本reids设计与实现的书,感觉整体的设计有些地方的确很巧妙,各个结构之间联系的非常紧密,但是很简单,逻辑性的没有太多,但是学到了一个bitcount计数1的方法比较巧妙,记 ...
- 浅论ajax跨域!从一个例子开始!
//所谓跨域,简单来说就是去访问不是自己域名下的数据 <!DOCTYPE html> <html lang="en"> <head> <m ...
- STL的空间配置器std_alloc 笔记
STL的空间配置器std_alloc 笔记 C++的内存分配基本操作是 ::operator new(),内存释放是 ::operator delete(),这里个全局函数相当于C的malloc和fr ...
- 一步一步教你将开源项目上传到jcenter
最近闲着看了一下jcenter的使用,也想将自己使用频率比较高的东西抽成类库,然后通过compile来使用,提高开发效率,本来以为挺简单的,但是网上介绍的比较模糊,很多博客也比较老了,不适用,花了我一 ...
- vue实现标签云效果
闲扯两句 最近想给自己的博客上加上一个3D标签云的效果,用来表示自己博客文章的分组,网上找到了canvas实现的,还有a元素实现的解析3D标签云,我想让标签可以选择和点击,又不想在标签数量较多时操作a ...
- 在C#中初遇Socket - 2
后期项目实战:多人在线聊天室 源码位置:https://git.oschina.net/z13qu/BlogProjects 前言 第一篇主要对Socket有个基本认识,实现初始化,发送.接受消息:本 ...