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]);
}
}
}

最新文章

  1. 纯html页面之间传参
  2. SQLAlchemy模型使用
  3. 基于Rest服务实现的RPC
  4. apache解析多个域名
  5. css3动画的两种方式transition和@keyframs
  6. The Lifecycle and Cascade of WeChat Social Messaging Groups-www2016-20160512
  7. 微信js接口自定义分享内容
  8. 编码问题(utf-8,gbk,utf-16be)
  9. 找不到eth0,但能找到eth1的问题解决办法
  10. iOS布局
  11. table固定头部,表格tbody可上下左右滑动
  12. mysql3 - 常规数据检索、常见操作与函数
  13. jquery-hide//一段hide代码实现异步隐藏
  14. 「HDU - 2857」Mirror and Light(点关于直线的对称点)
  15. Python安装、卸载第三方模块
  16. PAT 甲级 1041 Be Unique (20 分)
  17. xfsdump 备份文件系统
  18. typeof
  19. leetcode551
  20. hive创建临时函数

热门文章

  1. springboot 中使用websocket简单例子
  2. Vue2.0 全家桶开发的网页应用(参照吾记APP)
  3. 【小练习05】HTML+CSS--淘宝商铺小页面
  4. 每天一个Linux命令—— crontab
  5. 9.并发包非阻塞队列ConcurrentLinkedQueue
  6. win7下 mysql安装(mysql-5.7.18-winx64.zip)
  7. sublime text 快捷收集
  8. ecshop的详细安装步骤
  9. 二阶段项目所遇问题 如何实现php向js传输数据
  10. 关于php网络爬虫phpspider。