主席树区间第K大
主席树的实质其实还是一颗线段树, 然后每一次修改都通过上一次的线段树,来添加新边,使得每次改变就改变logn个节点,很多节点重复利用,达到节省空间的目的。
1.不带修改的区间第K大。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const LL mod = 1e9+;
const int N = 1e5+;
struct Node{
int l, r;
int num;
}tree[N*];
int tot = ;
int root[N];
int Rank[N];
int b[N];
struct N{
int a;
int id;
bool operator < (const N & x) const{
return a < x.a;
}
}A[N]; int Build(int l, int r){
int now = ++tot;
tree[now].num = ;
if(l == r) return now;
int m = l+r >> ;
tree[now].l = Build(l,m);
tree[now].r = Build(m+,r);
return now;
}
int update(int pre, int l, int r, int k){
int now = ++tot;
tree[now].num = ;
tree[now].l = tree[pre].l;
tree[now].r = tree[pre].r;
if(l < r) {
int m = l+r >> ;
if(k <= m) tree[now].l = update(tree[pre].l ,l, m, k);
else tree[now].r = update(tree[pre].r, m+, r, k);
tree[now].num = tree[tree[now].l].num + tree[tree[now].r].num;
}
else tree[now].num = ;
return now;
}
int query(int u, int v, int l, int r,int k){
if(l == r) return l;
int m = l+r >> ;
int num1 = tree[tree[v].l].num - tree[tree[u].l].num;
if(num1 >= k) return query(tree[u].l, tree[v].l, l, m, k);
return query(tree[u].r, tree[v].r, m+,r,k-num1);
}
int main(){
///Fopen;
int t, n, m;
scanf("%d", &t);
while(t--){
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++){
scanf("%d", &A[i].a);
A[i].id = i;
}
sort(A+, A++n); /// 离散化
int t = ;
A[].a = -;
for(int i = ; i <= n; i++){
if(A[i].a != A[i-].a) t++, Rank[t] = A[i].a;
b[A[i].id] = t;
}
tot = ;
root[] = Build(,t);
for(int i = ; i <= n; i++)
root[i] = update(root[i-], , t, b[i]);
while(m--){
int l, r, k;
scanf("%d%d%d", &l, &r, &k);
printf("%d\n", Rank[query(root[l-], root[r],, t, k)]);
}
}
return ;
}
/*
1
10 1
1 4 2 3 5 6 7 8 9 0
1 3 2 */
主席树区间第K大的更多相关文章
- POJ 2104 K-th Number 主席树(区间第k大)
题目链接: http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MSMemory Limit: 65536K 问题描述 You ar ...
- HDU 6278 主席树(区间第k大)+二分
Just h-index Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)To ...
- zoj2112 主席树动态第k大 (主席树&&树状数组)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- 牛客多校第九场H Cutting Bamboos(主席树 区间比k小的个数)题解
题意: 标记为\(1-n\)的竹子,\(q\)个询问,每次给出\(l,r,x,y\).要求为砍区间\(l,r\)的柱子,要求砍\(y\)次把所有竹子砍完,每次砍的时候选一个高度,把比他高的都砍下来,并 ...
- zoj2112 主席树动态第k大 ( 参考资料链接)
参考链接: http://blog.csdn.net/acm_cxlove/article/details/8565309 http://www.cnblogs.com/Rlemon/archive/ ...
- ZOJ2112--Dynamic Rankings (动态区间第k大)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)
题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...
- hdu 5919 主席树(区间不同数的个数 + 区间第k大)
Sequence II Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- zoj2112 树状数组+主席树 区间动第k大
Dynamic Rankings Time Limit: 10000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu Subm ...
随机推荐
- GStreamer基础教程06 - 获取媒体信息
摘要 在常见的媒体文件中,通常包含一些数据(例如:歌手,专辑,编码类型等),用于描述媒体文件.通常称这些数据为元数据(Metadata:data that provides information a ...
- centos6.5-7编译安装Ansible详细部署
一.基础介绍==========================================================================================ansi ...
- light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)
题目链接 大概题意是有n个男的n个女的(原谅我这么说,我是粗人),给你一个n*n的矩阵,第i行第j列表示第i个女(男)对第j个男(女)的好感度,然后要安排n对相亲,保证都是正常的(无搞基百合之类的), ...
- jboss6.1安装配置
Jboss6.1的用途,配置,使用详解 一..简介: JBoss是全世界开发者共同努力的成果,一个基于J2EE的开放源代码的应用服务器因为JBoss代码遵循LGPL许可,你可以在任何商业应用中免费使 ...
- CentOS系统故障 | 一桩"血案"引发的容器存储驱动比较
写在前面: 由于红帽在Linux界的影响力,相信很多朋友在测试和生产系统用的是RedHat或者CentOS系统,这次我在CentOS系统上遇到了一个很有意思的故障,通过这次故障的原因分析及解决,特意写 ...
- maven 下载 安装 环境配置
电脑系统:win10 64位 idea 2019 Java 1.8 1.链接地址,我一般都找官网 http://maven.apache.org/download.cgi 截图:注意mav ...
- S3 介绍
S3 是ceph rgw的基础,在学习RGW之前,先了解S3.
- Hadoop 系列(三)—— 分布式计算框架 MapReduce
一.MapReduce概述 Hadoop MapReduce 是一个分布式计算框架,用于编写批处理应用程序.编写好的程序可以提交到 Hadoop 集群上用于并行处理大规模的数据集. MapReduce ...
- Docker系列之烹饪披萨(二)
前言 上一篇我们讲解了虚拟机和容器的区别,本节我们来讲讲Docker中关于Dockerfile.镜像.容器等基本概念.Docker是一个在容器内开发.部署.运行应用程序的平台,Docker本质上是容器 ...
- springboot-jsp打jar问题
[**前情提要**]最近做了一个项目,项目是springboot+jsp结构的,但是在发布生产环境的时候又需要用maven打成jar包,但是一开始的默认配置都不成功.下面的文章就是具体的解决过程. - ...