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相关推荐

  1. BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...

  2. SP10628 COT - Count on a tree (树剖+可持久化线段树)

    题意: 给定一个包含 N 个结点的树. 树节点从 1 到 N编号..每个节点有一个整数权值. 我们会要求您执行以下操作: u v k : 询问从节点 u 到 节点 v 的路径上的第k小的权值 输入 在 ...

  3. 解题报告:P3834 【模板】可持久化线段树 2(主席树)详解

    P3834 [模板]可持久化线段树 2(主席树) 题解 P3834 [[模板]可持久化线段树 2(主席树)] 1)静态求第k大数 可持久化线段树,不能用堆的方法存子结点了,所以用指针l表示左儿子r表示 ...

  4. 可持久化线段树——主席树

    前言: 最近心(po)血(yu)来(ya)潮(li)学习了一下主席树.(再不学就落伍了) 主席树,即可持久化线段树,支持维护和查询区间的第\(k\)大(小).区间不同种类个数等,基于线段树的思想之上 ...

  5. BZOJ.3218.a + b Problem(最小割ISAP 可持久化线段树优化建图)

    BZOJ UOJ 首先不考虑奇怪方格的限制,就是类似最大权闭合子图一样建图. 对于奇怪方格的影响,显然可以建一条边\((i\to x,p_i)\),然后由\(x\)向\(1\sim i-1\)中权值在 ...

  6. 【模板】可持久化线段树 1(主席树)

    题目背景 这是个非常经典的主席树入门题--静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输 ...

  7. LGOJ P3919【模板】可持久化数组(可持久化线段树/平衡树)

    代码 //可持久化线段树 #include <cstdio> using namespace std;struct node {node *Lnode,*Rnode;int val;voi ...

  8. 【可持久化线段树?!】rope史上最全详解

    https://www.luogu.org/problemnew/show/P3919 看到上面链接中的题时,我在学会可持久化线段树的同时,第一次学会了一个非常屌(cai)的STL大法--rope!! ...

  9. 洛谷P3919可持久化线段树

    P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目提供者HansBug 站长团 评测方式云端评测 标签O2优化高性能 难度提高+/省选- 时空限制3000ms / 512MB 有了可持久 ...

最新文章

  1. Firefox 46解决安全问题,改善性能
  2. android 发送http请求
  3. 如何将现有的回调API转换为Promise?
  4. 一句话设置当前控制器的view跟随键盘起伏,妈妈再也不用担心键盘挡住输入框了...
  5. 走进异步世界:博客程序的异步化改造以及发布后的不理想情况
  6. linux 进程的执行时间,Linux 获取进程执行时间
  7. mysqld_multi stop 不能停掉mysql
  8. CODE[VS] 2824 盗窃-大海的奇迹
  9. vim中实现javascript代码自动完成功能
  10. LabView学习笔记(六):while循环与for循环
  11. Ubuntu18.04安装BeyondCompare
  12. 【Python读csv文件】'gbk' codec can't decode byte 0xb3 in position 73: illegal multibyte sequence
  13. 使用cmd命令行装逼,让命令行滚动起来
  14. PCB绘制成长日记1
  15. 算法学习之投票算法以及对应leetcode题目
  16. 产品经理入门攻略(3岁的PM成长分享)
  17. DXP改变字体的方法
  18. 分组加密中的四种模式(ECB、CBC、CFB、OFB)
  19. 淘宝商品图文详情(wdescContent)
  20. Python-Flask-2023.1.22

热门文章

  1. 电脑版实现微信双开的办法
  2. 【Python】获取当前北京时间
  3. 深度解析dubbo负载均衡之接口
  4. 视频去水印的方法-视频怎么去水印视频教程
  5. OPSS-PEG-NHS,SHN-PEG-OPSS
  6. 防守地图隐藏英雄密码全集
  7. SIMcom车规级模组SIM8100
  8. Project Server 2010安装部署手册(1.5版)
  9. HSDPA(High Speed Downlink Packet Access)高速下行分组接入,是一种移动通信协议,亦称为3.5G(3½G)...
  10. 华为matebooke不能下python_华为MateBookE2019体验 到底怎么样