[Luogu] 可持久化线段树 1(主席树)
https://www.luogu.org/problemnew/show/P3834
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring> using namespace std;
const int maxn = 2e5 + ; #define RR freopen("gg.in", "r", stdin) int n, m;
int cnt; struct node {
int L, R;//分别指向左右子树
int sum;//该节点对应区间数的个数
node() {
sum = ;
}
} Tree[maxn * ]; struct value {
int x;//值的大小
int id;//离散之前在原数组中的位置
} Value[maxn]; bool cmp(value v1, value v2) {
return v1.x < v2.x;
} int root[maxn];//多颗线段树的根节点
int rank[maxn];//原数组离散之后的数组 void init() {
cnt = ;
root[] = ;
Tree[].L = Tree[].R = Tree[].sum = ;
} void update(int num, int &rt, int l, int r) {
Tree[cnt++] = Tree[rt];//bu存在Tree[0]
rt = cnt - ;
Tree[rt].sum++;
if(l == r) return;
int mid = (l + r)>>;
if(num <= mid) update(num, Tree[rt].L, l, mid);
else update(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() {
RR;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) {
scanf("%d", &Value[i].x);
Value[i].id = i;
}
//进行离散化
sort(Value + , Value + n + , cmp);
for(int i = ; i <= n; i++) rank[Value[i].id] = i;
init();
for(int i = ; i <= n; i++) {
root[i] = root[i - ];
// cout << root[i] << endl;
update(rank[i], root[i], , n);//update(第i个数的排名,)
}
int left, right, k;
for(int i = ; i <= m; i++) {
scanf("%d%d%d", &left, &right, &k);
printf("%d\n", Value[query(root[left - ], root[right], k, , n)].x);
}
return ;
}
[Luogu] 可持久化线段树 1(主席树)的更多相关文章
- 归并树  划分树  可持久化线段树(主席树) 入门题 hdu 2665
		
如果题目给出1e5的数据范围,,以前只会用n*log(n)的方法去想 今天学了一下两三种n*n*log(n)的数据结构 他们就是大名鼎鼎的 归并树 划分树 主席树,,,, 首先来说两个问题,,区间第k ...
 - P3919 【模板】可持久化数组 -初步探究主席树
		
本篇blog主要是给自己(大家)看的. 感谢longlongzhu123奆佬(此人初二LCT)的指点,使本蒟蒻可以快速开始主席树入门. what is 主席树? $ $主席树这个名字只不 ...
 - [Luogu 3701] 「伪模板」主席树
		
[Luogu 3701] 「伪模板」主席树 这是一道网络流,不是主席树,不是什么数据结构,而是网络流. 题目背景及描述都非常的暴力,以至于 Capella 在做此题的过程中不禁感到生命流逝. S 向 ...
 - POJ  2104 K-th Number(分桶,线段树,主席树)
		
一道比较经典的数据结构题.可以用多种方式来做. 一,分桶法(平方分解). 根据数字x的大小和区间内不大于x的数字数量cnt的单调性,可知第k大数kth对应的cnt应该满足cnt≥k, 且kth是满足条 ...
 - 【题解】BZOJ3489 A Hard RMQ problem(主席树套主席树)
		
[题解]A simple RMQ problem 占坑,免得咕咕咕了,争取在2h内写出代码 upd:由于博主太菜而且硬是要用指针写两个主席树,所以延后2hQAQ upd:由于博主太菜而且太懒所以他决定 ...
 - poj 2104 K-th Number 划分树,主席树讲解
		
K-th Number Input The first line of the input file contains n --- the size of the array, and m --- t ...
 - 【BZOJ4771】七彩树(主席树)
		
[BZOJ4771]七彩树(主席树) 题面 BZOJ 题解 如果没有深度限制,每次只询问子树内的颜色个数,除了树套树\(dfs\)序加前驱或者后继强行二维数点之外,还有这样一种做法: 把所有相同颜色的 ...
 - 洛谷P3248 树 [HNOI2016] 主席树+倍增+分治
		
正解:主席树+倍增+分治 解题报告: 传送门! 首先看到这题会想到之前考过的这题 但是那题其实简单一些,,,因为那题只要用个分治+预处理就好,只是有点儿思维难度而已 这题就不一样,因为它说了是按照原树 ...
 - BZOJ_2588_Spoj 10628. Count on a tree_树剖+主席树
		
BZOJ_2588_Spoj 10628. Count on a tree_树剖+主席树 题意: 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastan ...
 - POJ 2761 Feed the dogs(平衡树or划分树or主席树)
		
Description Wind loves pretty dogs very much, and she has n pet dogs. So Jiajia has to feed the dogs ...
 
随机推荐
- spring cloud微服务实践一
			
最近在学习spring框架.其中spring cloud在微服务方面很火,所以在学习过程中,也做一些记录. 注:这一个系列的开发环境版本为 java1.8, spring boot2.x, sprin ...
 - css 样式合集
			
td换行: style="word-wrap:break-word;word-break:break-all;" 超长省略号: table { table-layout: fixe ...
 - redis哈希表数据类型键的设置
			
命令名称:hset 语法:hset key field value 功能: 1)将哈希表key中的域field的值设为value. 2)如果key不存在,一个新的哈希表被创建并进行hset操作. 3) ...
 - CCF 201809-1 卖菜
			
题目: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己 ...
 - SQL Server 输出 XML
			
一.概述 SELECT 查询将结果作为行集返回.在 SQL 查询中指定 FOR XML 子句,从而将该查询的正式结果作为 XML 来检索.FOR XML 子句可以用在顶级查询和子查询中.顶级 FOR ...
 - C#基础--go to
			
goto语句的用法非常灵活,你可以用它实现很多功能,但是由于goto语句的跳转影响程序的结构,在使用的时候会使人迷茫,所以一般"教材"上都不建议使用,但是用它可以实现递归,循环,选 ...
 - JFinal(2)JFinal 学习资料
			
JFinal 学习资料 :http://pan.baidu.com/s/1hsOcQ0G 密码:7lq3 , jfinal社区收费会员内部部分资料,博主网络搜集而来
 - 你不知道的javascript(上卷)读后感(二)
			
this词法 熟悉ES6语法的开发者,箭头函数在涉及this绑定时的行为和普通函数的行为完全不一致.跟普通this绑定规则不一样,它使用了当前的词法作用域覆盖了this本来的值. 误解 this理解成 ...
 - spider _其他库的简单操作与方法
			
PHP : 网络IO java : 代码笨重,代码量很大 C/C++ :虽然效率高,但是代码成型很慢 1 通用网络爬虫(搜索引擎引用,需要遵守robots协议) 1 搜索引擎如何获取一个新网站的 UR ...
 - JS (二)
			
]1 函数 1 函数就是一段待执行的代码段 2 函数可以实现功能的封装,可以实现代码的复用 3 函数使用: 1 函数声明 2 函数调用 4 语法: 1 函数声明 1 使用function关键字进行函数 ...