#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的更多相关文章

  1. CF840D[Destiny] [主席树板子]

    模板题,提供两种思路. 1.考虑它求得是 出现个数\(>\lfloor \frac{r-l+1}{k}\rfloor\) 的最小值 那么我们可以根据如果大于这个数那么你把这个区间数列排好序然后分 ...

  2. #194 sequence(搜索+动态规划+主席树)

    考虑按顺序暴搜子序列.如果序列中的数两两不同,显然每次给上一个找到的子序列添上后缀最小值,即为下一个要找的子序列.如果不能再加了就回溯继续考虑后缀次小.第三小……值,直到找到k个子序列. 有重复的数后 ...

  3. BZOJ2821 作诗(Poetize) 主席树 bitset

    原文链接https://www.lydsy.com/JudgeOnline/problem.php?id=2821 题目传送门 - BZOJ2821 题意 $n$ 个数,$m$ 组询问,每次问 $[l ...

  4. 洛谷P2633 Count on a tree 主席树

    传送门:主席树 解题报告: 传送门! umm这题我还麻油开始做 所以 先瞎扯一波我的想法,如果错了我就当反面教材解释这种典型错误,对了我就不管了QwQ 就直接dfs,在dfs的过程中建树 然后就直接查 ...

  5. 洛谷P3567 KUR-Couriers [POI2014] 主席树/莫队

    正解:主席树/莫队 解题报告: 传送门! 这题好像就是个主席树板子题的样子,,,? 毕竟,主席树的最基本的功能就是,维护一段区间内某个数字的个数 但是毕竟是刚get到主席树,然后之前做的一直是第k大, ...

  6. 洛谷P3248 树 [HNOI2016] 主席树+倍增+分治

    正解:主席树+倍增+分治 解题报告: 传送门! 首先看到这题会想到之前考过的这题 但是那题其实简单一些,,,因为那题只要用个分治+预处理就好,只是有点儿思维难度而已 这题就不一样,因为它说了是按照原树 ...

  7. P3302 [SDOI2013]森林(主席树+启发式合并)

    P3302 [SDOI2013]森林 主席树+启发式合并 (我以前的主席树板子是错的.......坑了我老久TAT) 第k小问题显然是主席树. 我们对每个点维护一棵包含其子树所有节点的主席树 询问(x ...

  8. BZOJ 2733 [HNOI2012]永无乡 - 启发式合并主席树

    Description 1: 查询一个集合内的K大值 2: 合并两个集合 Solution 启发式合并主席树板子 Code #include<cstdio> #include<cst ...

  9. 区间内x的出现个数(主席树)

    题目大概:求区间内x出现的次数 出题人yjy Description ZJK 给你一个长度为 n 的数列和 m 次询问,每次询问从第 l 个到第 r 个数中,数 x 出现了多少次.Input第一行一个 ...

随机推荐

  1. 南昌邀请赛B题(拉格朗日插值)

    题目链接:https://nanti.jisuanke.com/t/40254 #include<iostream> #include<cstdio> #include< ...

  2. 关于2008R2的序列号

    windows server 2008 r2 企业版序列号 BX4WB-3WTB8-HCRC9-BFFG3-FW26F P63JV-9RWW2-DJW7V-RHTMT-W8KWJ MDB49-7MYG ...

  3. LaTeX技巧011:LaTtex中如何产生直立体希腊字母?

     %\usepackage{upgreek}\upmu \uppi

  4. 51Nod 1068 Bash游戏 V3 (这规律不好找)

    有一堆石子共有N个.A B两个人轮流拿,A先拿.每次拿的数量只能是2的正整数次幂,比如(1,2,4,8,16....),拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出 ...

  5. 转载:openmax基本概念

    https://yellowmax.blog.csdn.net/article/details/78080168 https://yellowmax.blog.csdn.net/article/det ...

  6. GearHost稳定免费美国全能空间测试主机100M容量

    GearHost是一家美国的全能空间服务商,提供有免费100M容量的空间,月流量1G,限制CPU使用5%,由于配置过小只适合于开发测试使用,不过主机支持的脚本众多,支持PHP.NET和node.js还 ...

  7. 4.Docker 操作容器

    启动容器 所需要的命令主要为 docker run.例如,下面的命令输出一个 “Hello World”,之后终止容器. docker run ubuntu:16.04 /bin/echo 'Hell ...

  8. [Agc005D/At2060] Minimum Sum - 单调栈

    鉴于早上那题让我怀疑单调栈白学,特意来复习下单调栈 题意 考虑按照每个元素对答案的贡献来统计,那么我们只需要找到每个元素左边右边第一个比它小的就可 这题给的又是排列,简直不能再良心 #include ...

  9. Appium+Python+Pycharm如何创建并运行自动化测试脚本【真机运行】

    一.将测试机连接电脑,手机上会有一些提示,总之都允许就可以了,开始USB调试模式,之后打开cmd,输入adb devices,查看手机是否成功连接,如下图所示: 上图中可以看到,有一台设备已经成功连接 ...

  10. Xshell 5

    Xshell 5安装步骤(带安装包):http://www.cnblogs.com/ysocean/p/7702243.html