主席树(区间第k小的数)
题目链接: https://www.luogu.org/problem/P3834
首先要离散化,然后主席树模板。
1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 #define mid (l+r)/2
5 using namespace std;
6
7 const int N = 200010;
8 int n, q, m, cnt = 0;
9 int a[N], b[N], T[N];
10 int sum[N<<5], L[N<<5], R[N<<5];
11
12 inline int build(int l, int r)
13 {
14 int rt = ++ cnt;
15 sum[rt] = 0;
16 if (l < r){
17 L[rt] = build(l, mid);
18 R[rt] = build(mid+1, r);
19 }
20 return rt;
21 }
22
23 inline int update(int pre, int l, int r, int x)
24 {
25 int rt = ++ cnt;
26 L[rt] = L[pre]; R[rt] = R[pre]; sum[rt] = sum[pre]+1;
27 if (l < r){
28 if (x <= mid) L[rt] = update(L[pre], l, mid, x);
29 else R[rt] = update(R[pre], mid+1, r, x);
30 }
31 return rt;
32 }
33
34 inline int query(int u, int v, int l, int r, int k)
35 {
36 if (l >= r) return l;
37 int x = sum[L[v]] - sum[L[u]];
38 if (x >= k) return query(L[u], L[v], l, mid, k);
39 else return query(R[u], R[v], mid+1, r, k-x);
40 }
41
42 int main()
43 {
44 scanf("%d%d", &n, &q);
45 for (int i = 1; i <= n; i ++){
46 scanf("%d", &a[i]);
47 b[i] = a[i];
48 }
49 sort(b+1, b+1+n);
50 m = unique(b+1, b+1+n)-b-1;
51 T[0] = build(1, m);
52 for (int i = 1; i <= n; i ++){
53 int t = lower_bound(b+1, b+1+m, a[i])-b;
54 T[i] = update(T[i-1], 1, m, t);
55 }
56 while (q --){
57 int x, y, z;
58 scanf("%d%d%d", &x, &y, &z);
59 int t = query(T[x-1], T[y], 1, m, z);
60 printf("%d\n", b[t]);
61 }
62 return 0;
63 }
主席树(区间第k小的数)的更多相关文章
- 牛客多校第九场H Cutting Bamboos(主席树 区间比k小的个数)题解
题意: 标记为\(1-n\)的竹子,\(q\)个询问,每次给出\(l,r,x,y\).要求为砍区间\(l,r\)的柱子,要求砍\(y\)次把所有竹子砍完,每次砍的时候选一个高度,把比他高的都砍下来,并 ...
- POJ 2104 K-th Number 主席树(区间第k大)
题目链接: http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MSMemory Limit: 65536K 问题描述 You ar ...
- 主席树区间第K大
主席树的实质其实还是一颗线段树, 然后每一次修改都通过上一次的线段树,来添加新边,使得每次改变就改变logn个节点,很多节点重复利用,达到节省空间的目的. 1.不带修改的区间第K大. HDU-2665 ...
- codeforces 1262D Optimal Subsequences 主席树询问第k小
题意 给定长度为\(n\)的序列\(a\),以及m个询问\(<k,pos>\),每次询问满足下列条件的子序列中第\(pos\)位的值为多少. 子序列长度为\(k\) 序列和是所有长度为\( ...
- HDU 6278 主席树(区间第k大)+二分
Just h-index Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)To ...
- 【XSY2720】区间第k小 整体二分 可持久化线段树
题目描述 给你你个序列,每次求区间第\(k\)小的数. 本题中,如果一个数在询问区间中出现了超过\(w\)次,那么就把这个数视为\(n\). 强制在线. \(n\leq 100000,a_i<n ...
- HDU 5919 Sequence II(主席树+区间不同数个数+区间第k小)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5919 题意:给出一串序列,每次给出区间,求出该区间内不同数的个数k和第一个数出现的位置(将这些位置组 ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...
- 主席树总结(经典区间第k小问题)(主席树,线段树)
接着上一篇总结--可持久化线段树来整理吧.点击进入 这两种数据结构确实有异曲同工之妙.结构是很相似的,但维护的主要内容并不相同,主席树的离散化.前缀和等思想也要更难理解一些. 闲话 话说刚学习主席树的 ...
随机推荐
- cookie规范(RFC6265)翻译
来源:https://github.com/renaesop/blog/issues/4 RFC 6265 要点翻译 1.简介 本文档定义了HTTP Cookie以及HTTP头的Set-Cookie字 ...
- 如果通过 IP 判断是否是爬虫
通过 IP 判断爬虫 如果你查看服务器日志,看到密密麻麻的 IP 地址,你一眼可以看出来那些 IP 是爬虫,那些 IP 是正常的爬虫,就像这样: 在这密密麻麻的日志里面,我们不仅要分辨出真正的爬虫 I ...
- 常见排序——Java实现
1 package struct; 2 3 /** 4 * 5 * @作者:dyy 6 * @公司:陕西科技大学 7 * @修改日期: 8 * @邮箱:1101632375@qq.com 9 * @描 ...
- ubantu安装maven
下载地址 http://maven.apache.org/download.cgi 或直接命令行下载 wget https://downloads.apache.org/maven/maven-3/3 ...
- entfrm-app赋能entfrm零代码开发平台 开启多平台分发
entfrm-app是基于uni-app 框架.使用 Vue.js 语法开发的移动端 App开源产品.它可以编译为 H5.IOS App.Android App.微信小程序.QQ小程序.钉钉小程序.支 ...
- DMA(Data Migration Assistant)迁移SQLServer数据库
DMA适用于 本地SQLServer向Azure SQL Database迁移 两台不同的数据库服务器之间迁移 高版本->低版本 或 低版本->高版本 本文以两台不同服务器的低版本(SQL ...
- 4、Redis基础
redis性能 1.关于测试性能 官方自带的测试性能的工具 redis-benchmark 压力测试工具 #进行压力测试.需求:测试:100个并发连接,100000个请求 #redis-benchma ...
- shell脚本 比较mysql配置文件
一.简介 源码地址 日期:2019/12/19 介绍:较两个mysql实例的配置是否一致,支持比较配置文件,也支持比较系统变量的值 效果图: 二.使用 适用:centos6+ 语言:中文 注意:无 下 ...
- RocketMQ源码详解 | Broker篇 · 其五:高可用之主从架构
概述 对于一个消息中间件来讲,高可用功能是极其重要的,RocketMQ 当然也具有其对应的高可用方案. 在 RocketMQ 中,有主从架构和 Dledger 两种高可用方案: 第一种通过主 Brok ...
- BIT 常态化在线CTF系统 pwn题目
偶然得到这个平台,发现是BIT的CTF平台,应该是平时的阶段性的训练题目.看了看题,其他方向的题目感觉都是入门题,但是pwn题目,发现还是比入门题难一点点的,来记录一下. pwn1 栈上任意位置的读写 ...