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. dll注入及卸载实践

    三种方法:具体详见<逆向工程核心原理>. 1.创建远程线程CreateRemoteThread() 2.使用注册表AppInit_DLLs 3.消息钩取SetWindowsHookEx() ...

  2. ServerSocket的建立和使用

    -------------siwuxie095 工程名:TestMyServerSocket 包名:com.siwuxie095.socket 类名:MyServerSocket.java 工程结构目 ...

  3. PythonNote02_HTML标签

    <!DOCTYPE> <html> <head> <meta charset = "utf-8" /> <meta name= ...

  4. 关于Java继承体系中this的表示关系

    Java的继承体系中,因为有重写的概念,所以说this在子父类之间的调用到底是谁的方法,或者成员属性,的问题是一个值得思考的问题; 先说结论:如果在测试类中调用的是子父类同名的成员属性,这个this. ...

  5. 吸收效果,像是在Mac上的垃圾桶的效果一样

    #import "AppDelegate.h" #import <QuartzCore/QuartzCore.h> @interface AppDelegate () ...

  6. 说说excel

    今天遇到一个实际问题. 我有一组数据: 0.0.0.1 activate.adobe.com 0.0.0.1 practivate.adobe.com 0.0.0.1 ereg.adobe.com 0 ...

  7. PS中图层混合模式的计算方法

    https://zhuanlan.zhihu.com/p/23905865 长久以来一直用中文版本的PS,对于软件中的一些专业名字都是顾名思义,容易误入歧途,但当你真正看到英文版本的名字的时候才有豁然 ...

  8. spoj14846 Bribe the Prisoners

    看来我还是太菜了,这么一道破题做了那么长时间...... 传送门 分析 我首先想到的是用状压dp来转移每一个人是否放走的状态,但是发现复杂度远远不够.于是我们考虑区间dp,dpij表示i到j区间的所有 ...

  9. 发现C#winform编程中不常用的控件(一)<FlowLayoutPanel控件><拆分器控件Splitcontainer >

    第一部分:FlowLayoutPanel控件 实现效果: 将FlowLayoutPanel做为导航菜单按钮的容器 以实现 某个菜单按钮不显示时 整体的导航菜单布局不至于"缺憾" 原 ...

  10. break跳出多重循环

    大家都知道break只能跳出当前的一个循环语句,如果碰到要跳出多个循环体,那么我们就该在循环体开头设置一个标志位,然后使用带此标志位的break语句跳出多重循环 jump: ;i<;i++){ ...