主席树板子 p2104
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=1e5+;
int n,m,cnt,root[maxn];
int b[maxn],a[maxn];
struct node{int l,r,sum;}T[maxn*];
void update(int l,int r,int &x,int y,int pos)
{
//这里&的这种用法我不太清楚,大概就是能值传会root[];
//这里T[++cnt]的值先从root[y](也就是上一颗树)传过来,然后再
//多拉出几个节点,去连接与之前的树相关的节点(同样是传值这一步操作)
T[++cnt]=T[y],T[cnt].sum++,x=cnt;
if(l==r) return;
int mid=(l+r)/;
if(mid>=pos) update(l,mid,T[x].l,T[y].l,pos);
else update(mid+,r,T[x].r,T[y].r,pos);
}
int query(int l,int r,int x,int y,int pos)
{
if(l==r) return l;
int mid=l+r>>;
//这里如果sum>=pos,证明第pos大的值就在左边了,所以只需要枚举左边;
//否则枚举右边;
int sum=T[T[y].l].sum-T[T[x].l].sum;
if(sum>=pos) return query(l,mid,T[x].l,T[y].l,pos);
//右边的操作与左边大致相同,但是需要pos-sum,把前面的数去掉,
//因为右数是从1重新开始计数的。
else return query(mid+,r,T[x].r,T[y].r,pos-sum);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
sort(b+,b++n);
//离散化,为什么要离散化呢。因为主席树需要开的内存很大,
//离散化能降低内存;
int t=unique(b+,b++n)-b-;
for(int i=;i<=n;i++){
//取出离散化后的值;
int tmp=lower_bound(b+,b++t,a[i])-b;
update(,n,root[i],root[i-],tmp);
}
for(int i=;i<=m;i++){
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
//求出query后,再放进b数组,还原为之前的值。
printf("%d\n",b[query(,n,root[x-],root[y],k)]);
}
return ;
}
主席树板子 p2104的更多相关文章
- CF840D[Destiny] [主席树板子]
模板题,提供两种思路. 1.考虑它求得是 出现个数\(>\lfloor \frac{r-l+1}{k}\rfloor\) 的最小值 那么我们可以根据如果大于这个数那么你把这个区间数列排好序然后分 ...
- #194 sequence(搜索+动态规划+主席树)
考虑按顺序暴搜子序列.如果序列中的数两两不同,显然每次给上一个找到的子序列添上后缀最小值,即为下一个要找的子序列.如果不能再加了就回溯继续考虑后缀次小.第三小……值,直到找到k个子序列. 有重复的数后 ...
- BZOJ2821 作诗(Poetize) 主席树 bitset
原文链接https://www.lydsy.com/JudgeOnline/problem.php?id=2821 题目传送门 - BZOJ2821 题意 $n$ 个数,$m$ 组询问,每次问 $[l ...
- 洛谷P2633 Count on a tree 主席树
传送门:主席树 解题报告: 传送门! umm这题我还麻油开始做 所以 先瞎扯一波我的想法,如果错了我就当反面教材解释这种典型错误,对了我就不管了QwQ 就直接dfs,在dfs的过程中建树 然后就直接查 ...
- 洛谷P3567 KUR-Couriers [POI2014] 主席树/莫队
正解:主席树/莫队 解题报告: 传送门! 这题好像就是个主席树板子题的样子,,,? 毕竟,主席树的最基本的功能就是,维护一段区间内某个数字的个数 但是毕竟是刚get到主席树,然后之前做的一直是第k大, ...
- 洛谷P3248 树 [HNOI2016] 主席树+倍增+分治
正解:主席树+倍增+分治 解题报告: 传送门! 首先看到这题会想到之前考过的这题 但是那题其实简单一些,,,因为那题只要用个分治+预处理就好,只是有点儿思维难度而已 这题就不一样,因为它说了是按照原树 ...
- P3302 [SDOI2013]森林(主席树+启发式合并)
P3302 [SDOI2013]森林 主席树+启发式合并 (我以前的主席树板子是错的.......坑了我老久TAT) 第k小问题显然是主席树. 我们对每个点维护一棵包含其子树所有节点的主席树 询问(x ...
- BZOJ 2733 [HNOI2012]永无乡 - 启发式合并主席树
Description 1: 查询一个集合内的K大值 2: 合并两个集合 Solution 启发式合并主席树板子 Code #include<cstdio> #include<cst ...
- 区间内x的出现个数(主席树)
题目大概:求区间内x出现的次数 出题人yjy Description ZJK 给你一个长度为 n 的数列和 m 次询问,每次询问从第 l 个到第 r 个数中,数 x 出现了多少次.Input第一行一个 ...
随机推荐
- 在vue项目中播放m3u8格式视频
前言:最近公司在做一个线上会议的项目,要求后台网站播放m3u8格式的视频,查找部分资料,总结一下,方便后边查阅 1.在vue工程中安装以下依赖: cnpm install video.js --sa ...
- Iptables防火墙(未完)
来自深信服培训第二天下午课程 软防跟硬防 Linux包过滤防火墙概述 netfilter 位于Linux内核中的包过滤功能体系 称为Linux防火墙的"内核态" iptables ...
- UTF自动化测试工具
自UFT推出后,QTP慢慢退出历史舞台 UFT测试的基本流程:录制测试脚本—-编辑测试脚本—-调试测试脚本—-运行测试脚本—-分析测试结果 UFT(QTP)介绍 http://blog.csdn. ...
- uabntu命令行
1.命令行 命令行中令字体大小变大:ctrl+shift+"+" 命令行中令字体大小变小:ctrl+'-' 不执行:ctrl+c 下一页:f 上一页: ...
- numpy学习(三)
练习篇(Part 3) 31. 略 32. Is the following expressions true? (★☆☆) np.sqrt(-1) == np.emath.sqrt(-1) prin ...
- Keep、小红书、美图…独角兽App能拿到新一轮救命钱吗?
大多数人热爱手机,不是因为时尚的外观或者结实的零部件,而是因琳琅满目的App赋予其太多的功能.智能手机最先是清理掉人类的零碎时间,现如今又开始肢解我们大块的时间,或者说,智能手机本身就是生活.在如此背 ...
- RN开发-IDE和API
一.开发工具 1.Visual Studio Code:微软IDE,轻量级,只有30+M大小 2.nuclide :仅支持Mac 3.WebStorm : JavaScript开发工具(IDE) 二. ...
- 虚拟路径引起的bug
之前,遇到一个问题,就是,项目访问不了最新产生的pdf文件. 百思不得其解,为什么,返回 idea 页面就可以访问了(真的只是返回 idea 页面,不进行其他什么的操作).一直以为是热部署的问题 后来 ...
- 题解【洛谷P5658】[CSP-S 2019]括号树
题面 一道简单的栈与\(\text{DP}\)的结合. 首先介绍一下序列上的括号匹配问题,也就是此题在序列上的做法: 设 \(dp_i\) 表示以 \(i\) 结尾的合法的括号序列个数, \(ss_i ...
- 题解【Vijos1159】岳麓山上打水
题面 迭代加深搜索模板题. 注意开始时要先对桶的容量从小到大排序. 达到搜索层数时使用完全背包\(\text{check}\)即可. 具体实现参考代码. #include <bits/stdc+ ...