[POJ2104/HDU2665]Kth Number-主席树-可持久化线段树
2024-09-03 14:24:10
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]);
}
}
}
最新文章
- 纯html页面之间传参
- SQLAlchemy模型使用
- 基于Rest服务实现的RPC
- apache解析多个域名
- css3动画的两种方式transition和@keyframs
- The Lifecycle and Cascade of WeChat Social Messaging Groups-www2016-20160512
- 微信js接口自定义分享内容
- 编码问题(utf-8,gbk,utf-16be)
- 找不到eth0,但能找到eth1的问题解决办法
- iOS布局
- table固定头部,表格tbody可上下左右滑动
- mysql3 - 常规数据检索、常见操作与函数
- jquery-hide//一段hide代码实现异步隐藏
- 「HDU - 2857」Mirror and Light(点关于直线的对称点)
- Python安装、卸载第三方模块
- PAT 甲级 1041 Be Unique (20 分)
- xfsdump 备份文件系统
- typeof
- leetcode551
- hive创建临时函数
热门文章
- springboot 中使用websocket简单例子
- Vue2.0 全家桶开发的网页应用(参照吾记APP)
- 【小练习05】HTML+CSS--淘宝商铺小页面
- 每天一个Linux命令—— crontab
- 9.并发包非阻塞队列ConcurrentLinkedQueue
- win7下 mysql安装(mysql-5.7.18-winx64.zip)
- sublime text 快捷收集
- ecshop的详细安装步骤
- 二阶段项目所遇问题 如何实现php向js传输数据
- 关于php网络爬虫phpspider。