poj 2104 (主席树写法)
//求第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 (主席树写法)的更多相关文章
- K-th Number Poj - 2104 主席树
K-th Number Poj - 2104 主席树 题意 给你n数字,然后有m次询问,询问一段区间内的第k小的数. 解题思路 这个题是限时训练做的题,我不会,看到这个题我开始是拒绝的,虽然题意清晰简 ...
- [poj 2104]主席树+静态区间第k大
题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...
- poj 2104 主席树(区间第k大)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 44940 Accepted: 14946 Ca ...
- POJ 2104 - 主席树 / 询问莫队+权值分块
传送门 题目大意应该都清楚. 今天看到一篇博客用分块+莫对做了这道题,直接惊呆了. 首先常规地离散化后将询问分块,对于某一询问,将莫队指针移动到指定区间,移动的同时处理权值分块的数字出现次数(单独.整 ...
- POJ 2104 主席树模板题
#include <iostream> #include <cstdio> #include <algorithm> int const maxn = 200010 ...
- K-th Number POJ - 2104 划分树
K-th Number You are working for Macrohard company in data structures department. After failing your ...
- poj 2761 主席树的应用(查询区间第k小值)
Feed the dogs Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 22084 Accepted: 7033 De ...
- poj 2104 划分树
思路:裸的划分树 #include<iostream> #include<algorithm> #include<cstring> #include<cstd ...
- hdu 4417,poj 2104 划分树(模版)归并树(模版)
这次是彻底把划分树搞明确了,与此同一时候发现了模版的重要性.敲代码一个字符都不能错啊~~~ 划分树具体解释:点击打开链接 题意:求一组数列中随意区间不大于h的个数. 这个题的做法是用二分查询 求给定 ...
随机推荐
- POJ1426 Find The Multiple 解题报告
参考:http://www.cnblogs.com/ACShiryu/archive/2011/07/24/2115356.html #include <iostream> #includ ...
- 贪心算法之Prim
Prim与Dijistra算法有异曲同工之妙,只不过Dijistra是求最短路径,每次添加到集合中的是到固定起始点的最短距离,而Prim是求最小生成树,是整个图所有权重的最小和,每次添加到集合中的是到 ...
- Linux系统下安装rz/sz命令
执行命令 yum install -y lrzsz rz -be本地上传文件到服务器
- 什么是Session共享?请举出使用场景
是指在一个浏览器对应多个Web服务时,服务端的Session数据需要共享.例如单点登录.Web服务器集群等场景都需要用到.多子服务. Session共享有多种解决方案,例如Tomcat插件,我最喜欢的 ...
- 【UE4】二十六、Look at camera 蓝图
如图,把BP_Cube替换为你需要的对象(如3DUI等)即可.
- Python的logging模块、os模块、commands模块与sys模块
一.logging模块 import logging logging.debug('This is debug message') logging.info('This is info message ...
- svn 服务器搭建 (Linux)
1.svn目前在程序开发工程汇总应用非常普遍,所以学习svn的环境搭建还是很有必要的 2.本次安装的服务是Subversion(svn)针对的环境是Linux,Subversion(SVN) 是一个开 ...
- Django笔记 —— 基础部分总结
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Django笔记 —— 表单(form)
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Gradle下载及安装教程
Gradle是基于Groovy语言的项目自动化建构工具,在使用Gradle之前常用的构建工具有Ant和Maven,使用这些工具我们可以用来管理项目依赖,打包,部署和发布等.使用Gradle我们将需要的 ...