首页 > 其他分享 >主席树

主席树

时间:2023-08-12 22:55:23浏览次数:22  
标签:pre val rs int MN ls 主席

详细介绍看心情可能会补

放这就是想方便参考顺便水篇博客

我们要维护一个数组的信息,但是我们也要查询历史信息

大概思想是不同线段树相同的部分共用点

每次修改都复制原来点再进行修改,这样肯定不冲突

通过记录不同版本根节点编号来做索引

其实写起来跟普通线段树的区别就是修改的时候需要重新建点并且要动态开点

主席树

定义 & 建树

int cnt, rt[MN], val[MN];
int ls[MN], rs[MN];

int build(int s,int e) {
	int p=++cnt;
	if(s<e) {
		int mid=(s+e)>>1;
		ls[p]=build(s,mid);
		rs[p]=build(mid+1,e);
	}
	return p;
}

修改

int modify(int pre,int s,int e,int x) {
	int p=++cnt; val[p]=val[pre];
	ls[p]=ls[pre], rs[p]=rs[pre];
	if(s==e) val[p]++;
	if(s<e) {
		int mid=(s+e)>>1;
		if(x<=mid) ls[p]=modify(ls[p],s,mid,x);
		else rs[p]=modify(rs[p],mid+1,e,x);
		val[p]=val[ls[p]]+val[rs[p]];
	}
	return p;
}

查询

int query(int p,int q,int s,int e,int l,int r) {
    if(l<=s&&e<=r) return val[q]-val[p];
    int mid=(s+e)>>1, ans=0;
    if(l<=mid) ans+=query(ls[p],ls[q],s,mid,l,r);
    if(r>mid) ans+=query(rs[p],rs[q],mid+1,e,l,r);
    return ans;
}

标签:pre,val,rs,int,MN,ls,主席
From: https://www.cnblogs.com/chelsyqwq/p/17625759.html

相关文章

  • 祝贺!openGauss社区技术委员会主席李国良当选2023 IEEE FELLOW
    祝贺!openGauss社区技术委员会主席李国良当选2023IEEEFELLOW[openGauss](javascript:void(0);)2022-11-2917:56发表于广东近日,IEEE(InstituteofElectricalandElectronicEngineers)公布了2023年度Fellow名单,全球共有319位学者入选,华人学者占104位(约占总人数的31%)。其中,openGa......
  • openEuler委员会主席江大勇:激发原创力量,逐梦数智未来
    12月29日,由欧拉开源社区发起并联合华为、麒麟软件、统信软件、麒麟信安、超聚变、英特尔、中科院软件所、软通动力、润和软件等伙伴,共同举办的openEulerSummit2022于线上举行。会上,openEuler委员会主席江大勇发表了《激发原创力量,逐梦数智未来》的主题演讲。他表示:2022年欧拉系操......
  • 暑假集训随笔2 主席树/二维树状数组
    P4514上帝造题的七分钟题意维护对二维平面上的矩形区域各元素进行加法以及对矩形区域求和链接:https://www.luogu.com.cn/problem/P4514思路通过二维树状数组维护的二维前缀和利用差分实现矩形区域的区间加法与区间求和。具体而言,二维的前缀和可以仿照一维的前缀和进行定义......
  • 主席树学习笔记
    Tip:建议完成LuoguP3919后阅读。目录模板:静态区间\(k\)小值模板:动态区间\(k\)小值BZOJ3207:花神的嘲讽计划疯狂的颜色序列SPOJ10628:CountonatreeLuoguP3302森林模板题:静态区间\(k\)小值思路引导首先我们想一想,如何用线段树求数列\(k\)小值。我们可以建......
  • 主席树
    主席树——可持久化线段树,权值线段树运用:在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位置的值 3.区间内k小数开点——前缀和思想一.P3567[POI2014]KUR-Couriers#include<cstdio>#include<algorithm>usingnamespacestd;constintN=......
  • Luogu3168 [CQOI2015] 任务查询系统 - 主席树 - 二分 -
    题目链接:https://www.luogu.com.cn/problem/P3168题解:主席树可以解决一类j静态区间第\(k\)小的问题,我们先来看看这是怎么工作的主席树的本质就是有很多棵线段树,然后发现这些线段树绝大多数都是重叠的,因此可以优化到空间复杂度\(O(n\logn)\)在这里,我们将序列的每一个位置......
  • 主席树学习笔记
    什么是主席树主席树这个名字看上去很高级,其实不然,它还有另一个名字——可持久化线段树。什么是可持久化可持久化顾名思义就是它可以变得持久,就是我们对他不断进行单点修改后,突然查询它的某一个历史版本,这就叫可持久化。引入例题洛谷3919:可持久化数组题目大意如题,你需要维......
  • 美SEC主席公开演讲:我们为什么起诉币安和Coinbase?
       在SEC闪击币圈后,美SEC主席GaryGensler在PiperSandler全球交易所和金融科技大会发表演讲,他再次强调了监管的重要性,并指出监管已经明确,发行人、经纪交易商和交易所应该遵守。这不是指导方针不充分的问题,只是他们不想按照被监管机构告知的去做。   Gensler认为,美国资本市场......
  • 主席树
    主席树权值树在正常的树中,我们用下标来指元素(显然)但,我们也可以用值指元素,显然的,不能开\(4\times10^9\),于是,只能考虑动态建树主席树主席树,有黄嘉泰同志发明,因其缩写为时任主席的名字,故曰主席树主席树是一种可持久优化的树,意思是,它保存历史信息(不忘初心),或曰,主席树如何可......
  • 主席树
    可持久化线段树值域线段树设线段树节点\(i\)管辖区间\([l,r]\),\(i\)的\(val\)表示$l\ge$且$\ler$的数的个数那么\(i.l\)表示$l\ge$且$\lemid$的数的个数,\(i.r\)表示$mid+1\ge$且$\ler$的数的个数如果建\(n\)棵值域线段树,第\(i\)棵......