1.题意有坑,实际要求第k小。

2.没学过动态开点也没学过主席树,看一下博主思路然后妄想自己实现的后果就是拿命去调bug。

const int maxn = 1e5 + 5;
int test, n, m, tot;
int a[maxn], b[maxn]; namespace Seg {
#define ls(p) t[p].l
#define rs(p) t[p].r int sz, root[maxn];
struct Node {
int sum, l, r;
}t[maxn * 20]; int Build(int l, int r) {
int p = ++sz;
if (l == r) {
t[p].sum = t[p].l = t[p].r = 0;
return sz;
}
int mid = (l + r) >> 1;
t[p].l = Build(l, mid);
t[p].r = Build(mid + 1, r);
t[p].sum = t[ls(p)].sum + t[rs(p)].sum;
return p;
} int Update(int l, int r, int last, int k) {
int p = ++sz;
t[p].l = t[last].l, t[p].r = t[last].r, t[p].sum = 0;
if (l == r) {
t[p].sum = t[last].sum + 1;
return p;
}
int mid = (l + r) >> 1;
if (k <= mid) t[p].l = Update(l, mid, ls(last), k);
else t[p].r = Update(mid + 1, r, rs(last), k);
t[p].sum = t[ls(p)].sum + t[rs(p)].sum;
return p;
} int Query(int l, int r, int last, int p, int k) {
if (l == r) return b[l];
int res = t[ls(p)].sum - t[ls(last)].sum;
int mid = (l + r) >> 1;
if (res >= k) return Query(l, mid, ls(last), ls(p), k);
else return Query(mid + 1, r, rs(last), rs(p), k - res);
}
}; int main() {
for (read(test); test--; ) {
read(n), read(m);
rep(i, 1, n) read(a[i]), b[i] = a[i];
sort(b + 1, b + 1 + n);
tot = unique(b + 1, b + 1 + n) - b - 1;
rep(i, 1, n) a[i] = lower_bound(b + 1, b + 1 + tot, a[i]) - b; Seg::sz = 0;
Seg::root[0] = Seg::Build(1, tot);
rep(i, 1, n) Seg::root[i] = Seg::Update(1, tot, Seg::root[i - 1], a[i]);
while (m--) {
int l, r, k;
read(l), read(r), read(k);
writeln(Seg::Query(1, tot, Seg::root[l - 1], Seg::root[r], k));
}
}
return 0;
}

HDU2665(可持久化线段树板子)的更多相关文章

  1. hdu2665可持久化线段树,求区间第K大

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. BZOJ 2588: Spoj 10628. Count on a tree-可持久化线段树+LCA(点权)(树上的操作) 无语(为什么我的LCA的板子不对)

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 9280  Solved: 2421 ...

  3. hdu2665 主席树(可持久化线段树)

    题意:给定一个数组,每次查询第l到r区间的第k大值 解法嘛,当然是主席树,主席树即可持久化线段树,什么叫可持久化呢,就是指能够访问历史版本的数据结构,那么对于某些只能离线处理的题目强制在线之后 ,可以 ...

  4. 【CJOJ2316】【模板】可持久化线段树

    题面 Description 这是一道非常直白的可持久化线段树的练习题,目的并不是虐人,而是指导你入门可持久化数据结构. 线段树有个非常经典的应用是处理RMQ问题,即区间最大/最小值询问问题.现在我们 ...

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

    题面:[模板]可持久化数组(可持久化线段树/平衡树) 不知道说啥,总之我挺喜欢自己打的板子的! #include<cstdio> #include<cstring> #incl ...

  6. 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)

    Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...

  7. 可持久化线段树(主席树)快速简洁教程 图文并茂 保证学会。kth number例题

    如果学不会也不要打我. 假设你会线段树 开始! --- 主席树也叫可持久化线段树 顾名思义,它能够保存线段树在每个时刻的版本. 什么叫每个时刻的版本?你可能对一棵普通线段树进行各种修改,这每种样子就是 ...

  8. 【可持久化线段树】【P5826】【模板】子序列自动机

    [可持久化线段树][P5826][模板]子序列自动机 Description 给定一个序列 \(A\),有 \(q\) 次询问,每次询问一个序列 \(B\) 是不是 \(A\) 的子序列 Limita ...

  9. [学习笔记] 可持久化线段树&主席树

    众所周知,线段树是一个非常好用也好写的数据结构, 因此,我们今天的前置技能:线段树. 然而,可持久化到底是什么东西? 别急,我们一步一步来... step 1 首先,一道简化的模型: 给定一个长度为\ ...

随机推荐

  1. SQL server 2008安装教程

    下载SQL server 2008 r2(网上资源很多,这里给出一个:安装) 解压后右键以管理员权限打开set-up 这里可能会出现问题:.net framework 3.5未安装,可以参考 快速安装 ...

  2. 【总结整理】dojo学习

    Dojo Toolkit 的特性可以分到 4 个不同部分.这种划分使得开发人员可以将库大小保持到最小,确保应用程序性能不受大量 JavaScript 库下载的影响.例如,如果您只需要 Ajax 支持性 ...

  3. 框架之 hibernate之二

    1. Hibernate持久化对象的状态 2. Hibernate的一级缓存 3. Hibernate操作持久化对象的方法 4. Hibernate的基本查询 Hibernate的持久化类 什么是持久 ...

  4. Node.js的__dirname,__filename,process.cwd(),./的含义

    简单说一下这几个路径的意思,: __dirname: 获得当前执行文件所在目录的完整目录名 __filename: 获得当前执行文件的带有完整绝对路径的文件名 process.cwd():获得当前执行 ...

  5. vray学习笔记(4)混合材质是个什么东西

    看下定义: The Blend material lets you mix two materials on a single side of the surface. Blend material材 ...

  6. 红帽企业版RHEL7.1在研域工控板上,开机没有登陆窗口 -- 编写xorg.conf 简单三行解决Ubuntu分辩率不可调的问题

    红帽企业版RHEL7.1在研域工控板上,开机没有登陆窗口 没有登陆窗口 的原因分析: 没有登陆窗口的原因是因为有多个屏幕在工作,其中一个就是build-in 屏幕(内置的虚拟屏幕)和外接的显示器,并且 ...

  7. struts1和struts2之间的区别

    从action类上分析:1.Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. 2. Struts 2 Action类可以实现一个Action接 ...

  8. 4. 内网渗透之IPC$入侵

    IPC$连接 IPC$的概念: IPC$(Internet Process Connection)是共享”命名管道”的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限 ...

  9. 如何使用ArcPy

    ArcPy可以很方便的通过脚本调用ArcGIS的各种函数和功能.在此简单介绍一下.方法包括两种,第一种是直接使用ArcGIS中的命令行,输入一句,执行一句:第二种是创建一个Python脚本,直接执行其 ...

  10. 简单的使用rabbitmq的例子

    1.创建了两个项目 : (1).spring_cloud_rabbitmq_send 消息发送者 (2).spring_cloud_rabbitmq_receive  消息接受者 2. 添加rabbi ...