【9018:2208】可持久化线段树2
2208: 【模板】可持久化线段树2
时间限制: 3 Sec 内存限制: 256 MB
提交: 30 解决: 12
[提交][状态][讨论版]
题目描述
静态区间第K小问题是典型的主席树模板。
在这个问题中,你需要实现对区间第K小的查询。
输入
第1行,输入两个正整数n,m,表示数列长度,查询次数。
第2行,n个整数表示数列ai。
接下来m行,每行3个正整数l,r,k表示查询[l,r]内的第k小数。(1<=l<=r<=n,1<=k<=r-l+1)
输出
输出m行,每行1个整数表示答案。
样例输入
5 5 25957 6405 15770 26287 26465 2 2 1 3 4 1 4 5 1 1 2 2 4 4 1
样例输出
6405 15770 26287 25957 26287
提示
对于100%的数据满足:1≤N,M≤5⋅1051 \leq N, M \leq 2\cdot 10^5
对于数列中的所有数aia_i,均满足−109≤ai≤109-{10}^9 \leq a_i \leq {10}^9
代码如下:
#include<cstdio> #include<iostream> #include<algorithm> #define MN 500005 #define MM 10000005 using namespace std; int n,q,v[MN],rk[MN],vv[MN],cnt,T[MM],ls[MM],rs[MM],rt[MM]; bool cmp(int x,int y){return v[x]<v[y];} void update(int &k,int l,int r,int v){ls[++cnt]=ls[k],rs[cnt]=rs[k],k=cnt;if(l==r){T[k]=1;return;}int mid=(l+r)>>1;if(v<=mid) update(ls[k],l,mid,v);else update(rs[k],mid+1,r,v);T[k]=T[ls[k]]+T[rs[k]]; } int query(int k,int l,int r,int ql,int qr){if(l==r) return l;int mid=(l+r)>>1;if(k<=T[ls[qr]]-T[ls[ql]]) return query(k,l,mid,ls[ql],ls[qr]);else return query(k-=T[ls[qr]]-T[ls[ql]],mid+1,r,rs[ql],rs[qr]); } int main() {scanf("%d%d",&n,&q);for(int i=1;i<=n;i++) scanf("%d",&v[i]),rk[i]=i;sort(rk+1,rk+1+n,cmp);for(int i=1;i<=n;i++) vv[rk[i]]=i;//for(int i=1;i<=n;i++) printf("%d\n",rk[i]);for(int i=1;i<=n;i++) rt[i]=rt[i-1],update(rt[i],1,n,vv[i]);for(int i=1;i<=q;i++){int x,y,k; scanf("%d%d%d",&x,&y,&k);printf("%d\n",v[rk[query(k,1,n,rt[x-1],rt[y])]]);}return 0; }
转载于:https://www.cnblogs.com/Beginner-/p/8529053.html
【9018:2208】可持久化线段树2相关推荐
- BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...
- SP10628 COT - Count on a tree (树剖+可持久化线段树)
题意: 给定一个包含 N 个结点的树. 树节点从 1 到 N编号..每个节点有一个整数权值. 我们会要求您执行以下操作: u v k : 询问从节点 u 到 节点 v 的路径上的第k小的权值 输入 在 ...
- 解题报告:P3834 【模板】可持久化线段树 2(主席树)详解
P3834 [模板]可持久化线段树 2(主席树) 题解 P3834 [[模板]可持久化线段树 2(主席树)] 1)静态求第k大数 可持久化线段树,不能用堆的方法存子结点了,所以用指针l表示左儿子r表示 ...
- 可持久化线段树——主席树
前言: 最近心(po)血(yu)来(ya)潮(li)学习了一下主席树.(再不学就落伍了) 主席树,即可持久化线段树,支持维护和查询区间的第\(k\)大(小).区间不同种类个数等,基于线段树的思想之上 ...
- BZOJ.3218.a + b Problem(最小割ISAP 可持久化线段树优化建图)
BZOJ UOJ 首先不考虑奇怪方格的限制,就是类似最大权闭合子图一样建图. 对于奇怪方格的影响,显然可以建一条边\((i\to x,p_i)\),然后由\(x\)向\(1\sim i-1\)中权值在 ...
- 【模板】可持久化线段树 1(主席树)
题目背景 这是个非常经典的主席树入门题--静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输 ...
- LGOJ P3919【模板】可持久化数组(可持久化线段树/平衡树)
代码 //可持久化线段树 #include <cstdio> using namespace std;struct node {node *Lnode,*Rnode;int val;voi ...
- 【可持久化线段树?!】rope史上最全详解
https://www.luogu.org/problemnew/show/P3919 看到上面链接中的题时,我在学会可持久化线段树的同时,第一次学会了一个非常屌(cai)的STL大法--rope!! ...
- 洛谷P3919可持久化线段树
P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目提供者HansBug 站长团 评测方式云端评测 标签O2优化高性能 难度提高+/省选- 时空限制3000ms / 512MB 有了可持久 ...
最新文章
- Firefox 46解决安全问题,改善性能
- android 发送http请求
- 如何将现有的回调API转换为Promise?
- 一句话设置当前控制器的view跟随键盘起伏,妈妈再也不用担心键盘挡住输入框了...
- 走进异步世界:博客程序的异步化改造以及发布后的不理想情况
- linux 进程的执行时间,Linux 获取进程执行时间
- mysqld_multi stop 不能停掉mysql
- CODE[VS] 2824 盗窃-大海的奇迹
- vim中实现javascript代码自动完成功能
- LabView学习笔记(六):while循环与for循环
- Ubuntu18.04安装BeyondCompare
- 【Python读csv文件】'gbk' codec can't decode byte 0xb3 in position 73: illegal multibyte sequence
- 使用cmd命令行装逼,让命令行滚动起来
- PCB绘制成长日记1
- 算法学习之投票算法以及对应leetcode题目
- 产品经理入门攻略(3岁的PM成长分享)
- DXP改变字体的方法
- 分组加密中的四种模式(ECB、CBC、CFB、OFB)
- 淘宝商品图文详情(wdescContent)
- Python-Flask-2023.1.22
热门文章
- 电脑版实现微信双开的办法
- 【Python】获取当前北京时间
- 深度解析dubbo负载均衡之接口
- 视频去水印的方法-视频怎么去水印视频教程
- OPSS-PEG-NHS,SHN-PEG-OPSS
- 防守地图隐藏英雄密码全集
- SIMcom车规级模组SIM8100
- Project Server 2010安装部署手册(1.5版)
- HSDPA(High Speed Downlink Packet Access)高速下行分组接入,是一种移动通信协议,亦称为3.5G(3½G)...
- 华为matebooke不能下python_华为MateBookE2019体验 到底怎么样