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. 我积累的Java实用代码

    1.解压zip文件 /** * 解压输入的zip流,Java默认的解压只能处理UTF-8编码的文件或者目录名,否则会报MALFORMED异常 * * @param is 输入流 * @param ou ...

  2. android 获取sharedpreference的三种方法的区别

    1. public SharedPreferences getPreferences (int mode) 通过Activity对象获取,获取的是本Activity私有的Preference,保存在系 ...

  3. 使用ffmpeg压缩视频

    命令: ffmpeg -i 1.avi -b 64k 1-64k.avi ffmpeg下载:http://dl.pconline.com.cn/download/53703.html

  4. ROS Learning-030 (提高篇-008 A Mobile Base-06) 控制移动平台 --- (Python)odom导航的例子:移动一个方块路径

    ROS 提高篇 之 A Mobile Base-06 - 控制移动平台 - (Python)再次使用odom导航的一个例子:移动一个方块路径 我使用的虚拟机软件:VMware Workstation ...

  5. Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境

    Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境 我们的电脑系统:Windows 10 64位 Visual Studio 软件:Visual Studio 20 ...

  6. vue 之 模板字符串

    传统的JavaScript语言,输出模板通常是这样的写的. $('#result').append( 'There are <b>' + basket.count + '</b> ...

  7. Flask框架 之 基本使用

    初识Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求 ...

  8. 树莓派研究笔记(8)-- 编译lakka v2.1源码

    Lakka越玩越觉得强大.如果要是能自己修改一下代码,实现自定义的一些操作就更好了.还可以修复字体文件,修复在部分机器上自动更换Mac地址导致ip变化的问题. 所以我们来尝试编译这个系统.这篇文章几乎 ...

  9. ISIS协议

    ISIS协议是中间系统到中间系统协议(Intermediate system to intermediate system),是一种内部网管协议,是电信运营商普遍采用的内部网管协议之一. 简单的说IS ...

  10. WordCount-软件测试初体验

    github:https://github.com/skz12345/WordCount PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 40 60 · Esti ...