//求第K的的值

 1 #include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int maxn = 1e5 + ;
int n, m, cnt;
struct node {
int L, R, sum;
} tree[maxn * ];
struct value {
int x, id;
} val[maxn];
int cmp(value v1, value v2) {
return v1.x < v2.x;
}
int root[maxn], RANK[maxn];
void init() {
cnt = ;
root[] = ;
tree[].L = tree[].R = tree[].sum = ;
}
void updata(int num, int &rt, int l, int r) {
tree[cnt++] = tree[rt];
rt = cnt - ;
tree[rt].sum++;
if (l == r) return ;
int mid = (l + r) >> ;
if (num <= mid) updata(num, tree[rt].L, l, mid);
else updata(num, tree[rt].R, mid + , r);
}
int query(int i, int j, int k, int l, int r) {
int d = tree[tree[j].L].sum - tree[tree[i].L].sum;
if (l == r) return l;
int mid = (l + r) >> ;
if (k <= d) return query(tree[i].L, tree[j].L, k, l, mid);
else return query(tree[i].R, tree[j].R, k - d, mid + , r) ;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = ; i <= n ; i++) {
scanf("%d", &val[i].x);
val[i].id = i;
}
sort(val + , val + n + , cmp);
for (int i = ; i <= n ; i++)
RANK[val[i].id] = i;
init();
for (int i = ; i <= n ; i++) {
root[i] = root[i - ];
updata(RANK[i], root[i], , n);
}
int left, right, k;
for (int i = ; i <= m ; i++) {
scanf("%d%d%d", &left, &right, &k);
printf("%d\n", val[query(root[left - ], root[right], k, , n)].x);
}
return ;
}

poj 2104 (主席树写法)的更多相关文章

  1. K-th Number Poj - 2104 主席树

    K-th Number Poj - 2104 主席树 题意 给你n数字,然后有m次询问,询问一段区间内的第k小的数. 解题思路 这个题是限时训练做的题,我不会,看到这个题我开始是拒绝的,虽然题意清晰简 ...

  2. [poj 2104]主席树+静态区间第k大

    题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...

  3. poj 2104 主席树(区间第k大)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 44940   Accepted: 14946 Ca ...

  4. POJ 2104 - 主席树 / 询问莫队+权值分块

    传送门 题目大意应该都清楚. 今天看到一篇博客用分块+莫对做了这道题,直接惊呆了. 首先常规地离散化后将询问分块,对于某一询问,将莫队指针移动到指定区间,移动的同时处理权值分块的数字出现次数(单独.整 ...

  5. POJ 2104 主席树模板题

    #include <iostream> #include <cstdio> #include <algorithm> int const maxn = 200010 ...

  6. K-th Number POJ - 2104 划分树

    K-th Number You are working for Macrohard company in data structures department. After failing your ...

  7. poj 2761 主席树的应用(查询区间第k小值)

    Feed the dogs Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 22084   Accepted: 7033 De ...

  8. poj 2104 划分树

    思路:裸的划分树 #include<iostream> #include<algorithm> #include<cstring> #include<cstd ...

  9. hdu 4417,poj 2104 划分树(模版)归并树(模版)

    这次是彻底把划分树搞明确了,与此同一时候发现了模版的重要性.敲代码一个字符都不能错啊~~~ 划分树具体解释:点击打开链接 题意:求一组数列中随意区间不大于h的个数. 这个题的做法是用二分查询  求给定 ...

随机推荐

  1. n点游戏

    n点游戏 24点游戏是非常经典而简单的小游戏,从一堆扑克牌中抽取4张,向其中添加运算符号并使其运行结果恰等于24,这叫作24点游戏. 现在我们不再是组合24,而是组合出给定的数字n,但要求只可以利用任 ...

  2. JAVA 泛型方法<T>

    public static void main(String[] args) throws Exception { String[] arr = new String[]{"1", ...

  3. Android面试收集录 Android组件

    1.请说出Android SDK支持哪些方式显示富文本信息? 使用TextView组件可以显示富文本信息,如果要实现图文混排,需实现ImageGetter接口 使用WebView组件显示HTML页面 ...

  4. 3106: [cqoi2013]棋盘游戏

    3106: [cqoi2013]棋盘游戏 链接 分析: 极大极小搜索 + 记忆化. 代码 #include<bits/stdc++.h> using namespace std; type ...

  5. ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]

    错误堆栈: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[] at android ...

  6. javascript代码规范 [转]

    原文:http://www.css88.com/archives/5366 全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Ex ...

  7. L008之前课程实战模拟。

    L008之前课程实战模拟. . 安装CentOS 6.5 X86_64 . 配置网络 . 用CRT连接服务器 . 更换源http://mirrors.163.com/.help/CentOS6-Bas ...

  8. 使用Visual Studio 2017构建.Net Core的Docker镜像

    1 Docker  镜像优化 微软在为开发人员生成 Docker 镜像时,提供以下三种主要方案: 用于开发 .NET Core 应用的 镜像 用于构建生成 .NET Core 应用的 镜像 用于运行 ...

  9. 【廖雪峰老师python教程】——map/reduce

    Map[单个操作对不同单一对象重复进行] map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. 返回结果注 ...

  10. 免费天气预报API接口

    一.中国气象局(http://www.weather.com.cn) 1.实时接口 http://mobile.weather.com.cn/data/sk/101010100.html http:/ ...