主席树 - 可持久化线段树

模板

P3834 【模板】可持久化线段树 2(主席树) 区间求第 \(k\)

模板代码
#include<bits/stdc++.h>
using namespace std;
#define Maxn 200005
typedef long long ll;
inline int rd()
{int x=0;char ch,t=0;while(!isdigit(ch = getchar())) t|=ch=='-';while(isdigit(ch)) x=x*10+(ch^48),ch=getchar();return x=t?-x:x;
}
/*
len: 数组长度
cnt: 数据范围 
*/
int len,n,m,used;
int root[Maxn],a[Maxn],True_val[Maxn];
struct Li
{int val,num;
}LI[Maxn];
bool cmp(Li x,Li y) { return x.val<y.val; }
struct Tree
{int ls,rs,sum;
}tree[Maxn<<5];
void pushup(int p)
{tree[p].sum=tree[tree[p].ls].sum+tree[tree[p].rs].sum;
}
void build(int p,int nl,int nr)
{if(nl==nr) return;int mid=(nl+nr)>>1;if(mid>=nl) tree[p].ls=++used,build(tree[p].ls,nl,mid);if(mid<nr) tree[p].rs=++used,build(tree[p].rs,mid+1,nr);
}
void add(int p1,int p2,int nl,int nr,int pos,int k)
{if(nl==nr) { tree[p2].sum=tree[p1].sum+k; return; }int mid=(nl+nr)>>1;tree[p2]=tree[p1];if(pos<=mid) tree[p2].ls=++used,add(tree[p1].ls,tree[p2].ls,nl,mid,pos,k);else tree[p2].rs=++used,add(tree[p1].rs,tree[p2].rs,mid+1,nr,pos,k);pushup(p2);
}
int query(int p1,int p2,int nl,int nr,int rank)
{if(nl==nr) return nl;int sumls=tree[tree[p2].ls].sum-tree[tree[p1].ls].sum,mid=(nl+nr)>>1;if(rank<=sumls) return query(tree[p1].ls,tree[p2].ls,nl,mid,rank);else return query(tree[p1].rs,tree[p2].rs,mid+1,nr,rank-sumls);
}
int main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);len=rd(),m=rd();for(int i=1;i<=len;i++) LI[i].val=rd(),LI[i].num=i;sort(LI+1,LI+len+1,cmp),LI[0].val=-1;for(int i=1;i<=len;i++){if(LI[i].val!=LI[i-1].val) n++;a[LI[i].num]=n;True_val[n]=LI[i].val;}for(int i=0;i<=len;i++) root[i]=++used;build(root[0],1,n);for(int i=1;i<=len;i++) add(root[i-1],root[i],1,n,a[i],1);for(int i=1,l,r,k;i<=m;i++){l=rd(),r=rd(),k=rd();printf("%d\n",True_val[query(root[l-1],root[r],1,n,k)]);}//fclose(stdin);//fclose(stdout);return 0;
}

例题

P3899 [湖南集训]更为厉害

主要实现内容:给定一棵树,每次询问求出 \(u\) 的子树内,与 \(u\) 距离不超过 \(k\) 的所有节点的点权之和。

可以考虑以 \(dfn\) 序列作为 \(root[]\) ,每一个节点开一棵主席树。

修改时以每个点的深度为下标,附上点权。

这样就可以快速查询一颗子树(一段区间),并查询制指定深度的点权之和。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权&#xff0c;并配合网关实现了统一的授权异常返回值和权限配置等相关功能&#xff0c;本篇将介绍密码授权模式&#xff0c;从使用场景、源码剖析到具体实现详细讲解密码授权模式的相关应用。.netcore项目实…

CF11D-A Simple Task【状压dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF11D 题目大意 给出nnn个点mmm条边的一张简单无向图&#xff0c;求它的简单环的个数。 1≤n≤191\leq n\leq 191≤n≤19 解题思路 首先算重的问题很麻烦但也是解决这题的关键。 因为防止算重那么我们就只考虑在每个环编号…

YBTOJ:灯光控制(贪心)(公倍数)(暴力枚举)

文章目录题目描述解析代码题目描述 解析 没有想出来 首先可以确定开关要么开一次&#xff0c;要么不动&#xff0c;其他都和这俩是等价的 一开始最先想到的就是贪心的方法&#xff0c;每个开关遍历&#xff0c;如果按下会使答案变好就按下。 但是显然当前的开闭对后面是有后效…

Tree Constructer

题目&#xff1a; 题意&#xff1a; 如果点x和y有连边&#xff0c;当且仅当a[x] or a[y] 260 - 1 &#xff08;两者是充分必要&#xff09; 现在给你边的关系&#xff0c;问你每个点的值应该是多少&#xff1f;&#xff08;给出一种情况即可&#xff09; 题解&#xff1a; …

[USACO19JAN,Platinum]Train Tracking 2

虽然是简单的dp &#xff0c;but真的太难想到了&#xff0c;而且我的码力。。。 Train Tracking 2 【题目描述】 每天特快列车都会经过农场。列车有N节车厢&#xff08;1≤N≤105&#xff09;&#xff0c;每节车厢上有一个1到109之间的正整数编号&#xff1b;不同的车厢可能会…

轻重链剖分

重链剖分 P3384 【模板】轻重链剖分/树链剖分 $ / $ 模板代码&#xff1a; 注意&#xff1a; 如果有 \(0\) 号节点&#xff0c;并默认重儿子是零号节点&#xff0c;复杂度会退化为 \(O(n^2)\) 。原因&#xff1a; 代码第一次遍历默认重儿子是0&#xff0c;所以无法保证每次找到…

CF19E-Fairy【树形结构,差分】

正题 题目链接:https://www.luogu.com.cn/problem/CF19E 题目大意 给出nnn个点mmm条边的一张无向图&#xff0c;求有多少条边去掉后可以使得图变成一张二分图。 1≤n,m≤1041\leq n,m\leq 10^41≤n,m≤104 解题思路 虽然线段树分治可以暴力草过去但是考虑点智慧的做法。 众…

.netcore 堆栈调用方法小记

1|0背景上午临近午饭时&#xff0c;公司同事反馈验证码被攻击灌水。我们匆忙查询验证码明细&#xff0c;对已频繁出现的IP插入黑名单&#xff0c;但IP仍然隔断时间频繁变动&#xff0c;不得已之下只能先封禁对应公司id的验证码发送功能。年初时候&#xff0c;专门对SSO站点的发…

洛谷P2480:古代猪文(中国剩余定理)(欧拉定理)

传送门 文章目录题目描述解析总结代码题目描述 解析 简单来说&#xff0c;就是求&#xff1a; g∑C(d,n)(d是n的约数&#xff09;mod 999911659 可以先特判一下&#xff0c;999911659|g时&#xff0c;答案为0 否则&#xff0c;可以通过欧拉定理转化为&#xff1a; g∑C(d,n)(d…

Stone Game

题意&#xff1a; 有n堆石头&#xff0c;每堆石头最多只有三个石头&#xff08;最少1个&#xff09;&#xff0c;每两堆石头&#xff08;这两堆各含石头x个和y个&#xff09;合一起的费用为(x mod 3) * (y mod 3)&#xff0c;现在把所有堆合成一堆&#xff0c;问最小费用 题目…

杯子 + Kronican

杯子 Kronican 【题目描述】 重庆八中在80周年校庆的时候获捐n个杯子&#xff0c; 每个杯子有两个属性&#xff1a;一个是已装水量 ai&#xff0c;一个是可装水量 bi&#xff08;ai < bi&#xff09;。 从一个杯子向另一个杯子倒 x 单位体积的水需要花费的时间是 x 秒。 现…

【做题记录】 [HEOI2013]SAO

P4099 [HEOI2013]SAO 类型&#xff1a;树形 \(\text{DP}\) 这里主要补充一下 \(O(n^3)\) 的 \(\text{DP}\) 优化的过程&#xff0c;基础转移方程推导可以参考其他巨佬的博客(题解)。 令 \(f[x][p]\) 表示在以 \(x\) 为根的子树中&#xff0c;\(x\) 在拓扑序排在第 \(p\) 个时的…

CF25E-Test【AC自动机,bfs】

正题 题目链接:https://www.luogu.com.cn/problem/CF25E 题目大意 给出三个串&#xff0c;然后求一个最短的串包含这三个串。 1≤∣s1∣,∣s2∣,∣s3∣≤1051\leq |s_1|,|s_2|,|s_3|\leq 10^51≤∣s1​∣,∣s2​∣,∣s3​∣≤105 解题思路 把三个串状压&#xff0c;先跑出AC…

微软开源的Trill是什么?

以下是一篇15年的文章的译文&#xff1a;https://dwainegilmer.wordpress.com/2015/01/28/microsoft-trill-for-streaming-analytics-from-microsoft-research/当今许多大数据应用程序套件的重点是数据存储。它们是围绕狭窄范围的数据集设想和设计的&#xff0c;通常是为了组织…

剪纸游戏(博弈论)(SG函数)

文章目录题目描述解析题目描述 解析 本题的关键就是SG函数的定义 尝试了一些自己直观上可能对但题解没有使用的约定方法&#xff08;当然最后证明都是错的 。。。&#xff09;&#xff0c;对SG的理解更深刻了一些 SG0的含义是无法再移动换句话说也就是再移动也对败局于事无补&…

Fight against involution

题目&#xff1a; 对抗内卷&#xff08;大佬经常说别再卷了&#xff09; 有一门课程n个学生选&#xff0c;期末要写一篇论文每个同学写的字数有一个下限和一个上限&#xff0c;课程的成绩是按学生字数的排名来给分的&#xff0c;排名越高分数越高&#xff0c;每个同学都想得到…

【做题记录】 [JLOI2011]不等式组

P5482 [JLOI2011]不等式组 超烦人的细节题&#xff01;(本人调了两天 QAQ ) 这里介绍一种只用到一只树状数组的写法(离线)。 树状数组的下标是&#xff1a;所有可能出现的数据进行离散化之后的值。 其含义为&#xff1a;当 \(x\) 离散化后值为 \(i\) 时能满足的不等式个数为 \(…

[COCI2017-2018#5] Karte

[COCI2017-2018#5] Karte&#xff0c;简短的代码想到了就AC 这道题是SPJ放心搞 但是我的脑子里面的东西&#xff0c;不用我多说&#xff0c;你们就知道是水和面粉和成的 看招 题 【题目描述】 你有一副共有N张牌的牌&#xff0c;在第i张牌上会有一个数字ai表示在这张牌下面至…

YBTOJ:红与蓝(博弈论)

文章目录题目描述解析代码题目描述 解析 首先&#xff0c;这道题的情境对二人来说是不对称的&#xff0c;所以不太好使用SG函数来求解 但直观上也好考虑 利用树的递归性质可以求出每个节点的颜色是否确定 并确定根的颜色是否确定 如果确定是红就随便涂 确定是蓝就-1 关键在于不…

NWERC2020J-Joint Excavation【构造,贪心】

正题 题目链接:https://codeforces.com/gym/103049/problem/J 题目大意 nnn个点mmm条边的一张无向图&#xff0c;选出一条路径后去掉路径上的点&#xff0c;然后将剩下的点分成点数相等的两份使得两份之间没有边连接。 1≤n,m≤21051\leq n,m\leq 2\times 10^51≤n,m≤2105 解…