主席树可以存储线段树的历史状态,空间消耗很大,一般开45n即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <queue>
#define lson l, mid
#define rson mid+1, r
#define ll long long
using namespace std;
const int MAXN = 200005;
ll init() {
ll rv = 0, fh = 1;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-' ) fh = -1;
c = getchar();
}
while(c >= '0' && c <='9') {
rv = (rv<<1) + (rv<<3) + c - '0';
c = getchar();
}
return fh * rv;
}
ll n, m, num[MAXN],tmp[MAXN];
struct LTSGT {
ll rot[MAXN], sum[MAXN*45], lpos[MAXN*45], rpos[MAXN*45];
int cnt = 0;
int build(int l, int r) {
int rt = ++cnt;
if(l == r) {
sum[rt] = 0;
return rt;
}
int mid = (l + r) >>1;
lpos[rt] = build(l, mid);
rpos[rt] = build(mid + 1, r);
return rt;
}
int Update(int pre, int l, int r, int x) {
int rt = ++cnt;
if(l == r) {
sum[rt] = sum[pre] + 1;
return rt;
}
int mid = (l + r) >>1;
lpos[rt] = lpos[pre]; rpos[rt] = rpos[pre]; sum[rt] = sum[pre] + 1;
if(x <= mid) lpos[rt] = Update(lpos[pre], l, mid, x);
else rpos[rt] = Update(rpos[pre], mid + 1, r, x);
return rt;
}
int Query(int aa, int bb, int l, int r, int k) {
if(l == r) return l;
int mid = (l + r) >>1;
int x = sum[lpos[bb]] - sum[lpos[aa]];
if(x >= k) return Query(lpos[aa], lpos[bb], l, mid, k);
else return Query(rpos[aa], rpos[bb], mid + 1, r, k - x); //注意。这里要k-x
}
void print(int rt){
cout<<sum[rt]<<endl;
if(lpos[rt]) print(lpos[rt]);
if(rpos[rt]) print(rpos[rt]);
}
}ltsgt;
int main() {
freopen("in.txt", "r", stdin);
n = init(); m = init();
for(int i = 1 ; i <= n ; i++) {
num[i] = init();
tmp[i] = num[i];
}
sort(tmp + 1, tmp + n + 1);
ltsgt.rot[0] = ltsgt.build(1, n);
for(int i = 1 ; i <= n ; i++) {
int t = lower_bound(tmp + 1, tmp + n + 1, num[i]) - tmp;
ltsgt.rot[i] = ltsgt.Update(ltsgt.rot[i-1], 1, n ,t);
}
//ltsgt.print(ltsgt.rot[4]);
for(int i = 1 ; i <= m ; i++) {
int aa = init(), bb = init(), k = init();
printf("%lld\n", tmp[ltsgt.Query(ltsgt.rot[aa-1], ltsgt.rot[bb], 1, n, k)]); //注意这里是aa-1
}
fclose(stdin);
return 0;
}

洛谷 [P3834] 可持久化线段树(主席树)的更多相关文章

  1. 洛谷P3834 可持久化线段树(主席树)模板

    题目:https://www.luogu.org/problemnew/show/P3834 无法忍受了,我要写主席树! 解决区间第 k 大查询问题,可以用主席树,像前缀和一样建立 n 棵前缀区间的权 ...

  2. 洛谷 P3919 可持久化线段树 题解

    题面 这题好水的说~很明显就是主席树的大板子 然而我交了3遍才调完所有的BUG,开好足够的数组,卡掉大大的常数: 针对与每次操作,change()会创建新节点,而ask()虽然也会更新左右儿子的节点编 ...

  3. 【洛谷2839/BZOJ2653】middle(主席树)

    题目: 洛谷2839 分析: 记\(s_i\)表示原序列中第\(i\)大的数. 考虑对于任意一个区间\([a,b]\),设它的中位数为\(s_m\),那么这个区间内大于等于\(s_m\)的数和小于\( ...

  4. LOJ 2555 & 洛谷 P4602 [CTSC2018]混合果汁(二分+主席树)

    LOJ 题目链接 & 洛谷题目链接 题意:商店里有 \(n\) 杯果汁,第 \(i\) 杯果汁有美味度 \(d_i\),单价为 \(p_i\) 元/升.最多可以添加 \(l_i\) 升.有 \ ...

  5. 洛谷P2633 Count on a tree(主席树上树)

    题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...

  6. 洛谷P4587 [FJOI2016]神秘数(主席树)

    题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\ ...

  7. 洛谷$P$4137 $Rmq\ Problem / mex$ 主席树

    正解:主席树 解题报告: 传送门$QwQ$ 本来以为是道入门无脑板子题,,,然后康了眼数据范围发现并没有我想像的那么简单昂$kk$ 这时候看到$n$的范围不大,显然考虑离散化?但是又感觉似乎布星?因为 ...

  8. 洛谷$P$3168 任务查询系统 $[CQOI2015]$ 主席树

    正解:主席树 解题报告: 传送门! 首先考虑如果是单点修改,那就是个线段树板子嘛$QwQ$ 然后现在是区间修改,对于区间修改,显然就考虑差分下,就变成单点修改辣$QwQ$ 同时单点查询前$k$小也就变 ...

  9. [bzoj3123][洛谷P3302] [SDOI2013]森林(树上主席树+启发式合并)

    传送门 突然发现好像没有那么难……https://blog.csdn.net/stone41123/article/details/78167288 首先有两个操作,一个查询,一个连接 查询的话,直接 ...

随机推荐

  1. org.springframework.beans.factory.BeanCreationException: Could not autowire

    由于我在项目中引用了如下代码,增加了 @Configurationpublic class Connection {    public @Bean HttpClientConfig httpClie ...

  2. iOS UI 设计

    优设 http://www.uisdc.com Sketch http://www.sketchcn.com

  3. 移动产品设计之ios系统的导航

    做道题:[不定项选择题] OS中导航设计模式有几种? A.平铺导航 B.标签导航 C.树形导航 D.模态视图导航 正确答案:A B C 讲解: 导航始终是产品设计的重头戏,往往产品设计中90%的事情就 ...

  4. Swift 编程思想 Part 4:map all the things!

    Swift 编程思想 Part 4:map all the things! 2015-10-22  837 文章目录 1. 数组 vs. 可选类型 2. 作用在可选类型上的 map() 3. 回到我们 ...

  5. 低性能3张图片轮播React组件

    import React from 'react'; import {getSwipeWay} from '../utils/swipe'; class Carousel extends React. ...

  6. linux运维中常用的指令

    一.终端中常用的快捷键 man界面中的快捷键: ?keyword                 向上搜索关键词keyword,n向下搜索,N继续向上搜索 /keyword   向下搜索关键词keyw ...

  7. Elasticsearchs的安装/laravel-scout和laravel-scout-elastic的安装

    安装: https://github.com/medcl/elasticsearch-rtf 先下载包 下载解压后 cd elasticsearch-rtf-master ll bin/elastic ...

  8. Python_sort函数结合functools.cmp_to_key(func)分析

    举例如下: from functools import cmp_to_key persons = [ { 'name':'zhangsan', 'age':20, 'grade':98 }, { 'n ...

  9. 模板<最小生成树>

    转载 最小生成树浅谈 这里介绍最小生成树的两种方法:Prim和Kruskal. 两者区别:Prim在稠密图中比Kruskal优,在稀疏图中比Kruskal劣.Prim是以更新过的节点的连边找最小值,K ...

  10. jmx_exportter+prometheus+grafana监控hadoop

    0.介绍(摘录自https://www.hi-linux.com/posts/25047.html) 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和 ...