[luogu3834][可持久化线段树 1(主席树)]
思路
裸的主席树。查询的时候,通过相减求出区间内左子树中数的个数a。然后判断要查找的k是否比这个z要大。如果比这个值大,那么就去右子树中查找第k - z大,否则去左子树中查找第k大。
代码
/*
* @Author: wxyww
* @Date:   2018-12-11 16:27:19
* @Last Modified time: 2018-12-11 16:46:07
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<map>
#include<bitset>
using namespace std;
typedef long long ll;
const int N = 200000 + 100;
ll read() {
   ll x=0,f=1;char c=getchar();
   while(c<'0'||c>'9') {
      if(c=='-') f=-1;
      c=getchar();
   }
   while(c>='0'&&c<='9') {
      x=x*10+c-'0';
      c=getchar();
   }
   return x*f;
}
int a[N],root[N];
map<int,int>ma;
int tree[N * 30],ls[N * 30],rs[N * 30];
int tot,dy[N];
void update(int &rt,int lst,int l,int r,int pos) {
   rt = ++tot;
   ls[rt] = ls[lst];rs[rt] = rs[lst];
   tree[rt] = tree[lst] + 1;
   if(l == r) return;
   int mid = (l + r) >> 1;
   if(pos <= mid) update(ls[rt],ls[lst],l,mid,pos);
   else update(rs[rt],rs[lst],mid + 1,r,pos);
}
int query(int L,int R,int l,int r,int k) {
   int z = tree[ls[R]] - tree[ls[L]];
   if(l == r) return l;
   int mid = (l + r) >> 1;
   if(k <= z) return query(ls[L],ls[R],l,mid,k);
   else return query(rs[L],rs[R],mid + 1,r,k - z);
}
int main() {
   int n = read(),m = read();
   for(int i = 1;i <= n;++i) ls[i] = a[i] = read();
   sort(ls + 1,ls + n + 1);
   int js = 0;
   ma[ls[1]] = ++js;
   dy[js] = ls[1];
   for(int i = 2;i <= n;++i) if(ls[i] != ls[i - 1]) ma[ls[i]] = ++js,dy[js] = ls[i];
   for(int i = 1;i <= n;++i) a[i] = ma[a[i]];
   for(int i = 1;i <= n;++i) update(root[i],root[i - 1],1,js,a[i]);
   while(m--) {
      int l = read(),r = read(),k = read();
      printf("%d\n",dy[query(root[l - 1],root[r],1,js,k)]);
   }
   return 0;
}
[luogu3834][可持久化线段树 1(主席树)]的更多相关文章
- 归并树  划分树  可持久化线段树(主席树) 入门题 hdu 2665
		如果题目给出1e5的数据范围,,以前只会用n*log(n)的方法去想 今天学了一下两三种n*n*log(n)的数据结构 他们就是大名鼎鼎的 归并树 划分树 主席树,,,, 首先来说两个问题,,区间第k ... 
- P3919 【模板】可持久化数组 -初步探究主席树
		本篇blog主要是给自己(大家)看的. 感谢longlongzhu123奆佬(此人初二LCT)的指点,使本蒟蒻可以快速开始主席树入门. what is 主席树? $ $主席树这个名字只不 ... 
- 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 ... 
随机推荐
- DLNA流媒体设置
- java日志框架之logback(一)——logback工程简介
			Logback工程 致力于成为log4j工程的继承者 Logback的架构足够泛型化,故能够应用于许多不同的环境.当前,logback划分为三个组件: logback-core logback-cla ... 
- servlet中将值以json格式传入
			详细连接https://blog.csdn.net/e_wsq/article/details/71038270$('#but_json_json').click(function(){ }; $.a ... 
- python之路--装饰器
			二 .通用装饰器的写法 python里面的动态代理. 存在的意义: 在不破坏原有的函数和原有函数的调用基础上,给函数添加新的功能 def wrapper(fn): # fn是目标函数. def inn ... 
- MySQL中and和or的优先级的问题
			参考资料: 关于MySQL中AND和OR的优先级的问题 SQL语句中的AND和OR执行顺序问题 MySQL带OR关键字的多条件查询 
- IntelliJ IDEA详情
			详情请参考http://www.phperz.com/article/15/0923/159043.html 
- 三、Docker网络
			一.查看8001端口是否开启处监听状态 netstat -apnl | grep 8001 二.使用brctl show可以看到虚拟机的网络关系 brctl show docker每新建一个conta ... 
- Lodop提示安装或升级的注意事项
			LODOP的LodopFuncs.js文件里,自动判断浏览器类型提示下载哪个,根据版本号比较判断提示升级.此文章是以前写的,图示可能过旧,新版提示不同,但是LodopFuncs.js里各个方面变动不大 ... 
- 学习 Spring (四) Bean 的生命周期
			Spring入门篇 学习笔记 定义 --> 初始化 --> 使用 --> 销毁 初始化 实现 org.springframework.beans.factory.Initializi ... 
- centOS7 下配置和启动maria数据库
			从最新版本的linux系统开始,默认的是 Mariadb而不是mysql! 使用系统自带的repos安装很简单: yum install mariadb mariadb-server systemct ... 
