首页 > 其他分享 >主席树

主席树

时间:2023-12-20 11:55:39浏览次数:22  
标签:val rs int tr tot ls 主席

struct ZXS{
	int tot=0;
	TREE tr[N*32];
	int xin(int p){
		tot++,tr[tot]=tr[p];
		return tot;
	}
	void up(int p){
		int ls=tr[p].ls,rs=tr[p].rs;
		tr[p].val=tr[ls].val+tr[rs].val;
	}
	int build(int p,int l,int r){
		p=++tot;
		if(l==r){
			tr[p].val=0;
			return p;
		}
		int mid=(l+r)>>1;
		tr[p].ls=build(tr[p].ls,l,mid);
		tr[p].rs=build(tr[p].rs,mid+1,r);
		return p;
	}
	int add(int p,int l,int r,int x,int y){
		p=xin(p);
		if(l==r){
			tr[p].val+=y;
			return p;
		}
		int mid=(l+r)>>1;
		if(x<=mid) tr[p].ls=add(tr[p].ls,l,mid,x,y);
		else tr[p].rs=add(tr[p].rs,mid+1,r,x,y);
		up(p);
		return p;
	}
	int cal(int p1,int p2){
		return tr[p1].val-tr[p2].val;
	}
	int find(int p1,int p2,int l,int r,int x){
		if(!x) return 0;
		if(!p1) return 0;
		if(l==r) return cal(p1,p2);
		int mid=(l+r)>>1;
		if(x<=mid) return find(tr[p1].ls,tr[p2].ls,l,mid,x);
		else return cal(tr[p1].ls,tr[p2].ls)+find(tr[p1].rs,tr[p2].rs,mid+1,r,x);
	}	
}T[2];

标签:val,rs,int,tr,tot,ls,主席
From: https://www.cnblogs.com/hubingshan/p/17916215.html

相关文章

  • [学习笔记]主席树(可持久化权值线段树)
    主席树简介主席树,全称为可持久化权值线段树。有的人不知道什么是可持久化,其实很好理解,就是某个mhy游戏最早是1.0版本,至今到了4.2版本,可持久化就是可以在1.0~4.2版本间任选一个版本出来进行修改。例题1P3919【模板】可持久化线段树1(可持久化数组)题意分析需要写一......
  • 理解线段树和主席树:解决区间操作的利器
    在计算机科学和算法领域,区间操作问题是一类常见且重要的问题,它们涉及到在一维数据结构中执行查询和更新操作。线段树和主席树是两种用于解决这类问题的强大数据结构。本文将介绍这两种树状数据结构,以及它们在不同应用领域中的使用。什么是线段树?线段树是一种用于处理区间操作问......
  • 详解主席树与二维数点问题
    主席树与二维数点问题前言:自己在网上搜索了很久,都没有看到具体是怎么维护的,下课问了下,一下就点醒了。正文:先考虑主席树和二维数点有什么关系。我们可以将y轴看成一个时间轴。我们查询y1-y2之间的数字时,其实就是查询这些版本下的x1-x2的区间和,最后由于可加性,直接差分相减即可......
  • 齿轮加工刀片,原机械工业部副部长、国务院中央大型企业监事会主席贾成炳一行莅临成都工
    成都工具研究所有限公司的前身是成都工具研究所,于1956年创建于北京,是原机械工业部的直属研究所,是我国机械工业的综合性工具科研机构。公司官网:http://www.ctri.com.cn/公司主要从事精密切削工具、精密测量仪器以及表面改性处理技术的技术研究、产品开发和应用服务。8月22日,原机械......
  • 主席树
    //动态开点可持久化权值线段树#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+5;structSegmentree{intls,rs,sum;}t[N<<5];intrt[N],tot=0,n,m,a[N],b[N],p;//p含义为修改点voidbuild(intp,intl,intr){p=++tot;if(l==r)return;......
  • BLOG1029<-主席树,
    这个比splay好学多了(主席树就是把每次修改的版本保留下来,版本就是线段树曾经的一个状态。如果打暴力的话可以想把每个状态的线段树都保留下来,炸飞了。主席树单点修改的话就是发现了每次修改只改了包含这个点的层,线段树上,这是\(\logn\)级的,我们可以只创建这些新节点。每次修......
  • 2023 年 CCPC 网络预选赛 L.Partially Free Meal (主席树)
    传送门先插个图玩云顶之弈。#include<iostream>#include<cstring>#include<algorithm>#include<vector>#definelllonglong#definefsfirst#definesesecondconstlongdoubleeps=1e-9;constintN=2e5+10,M=2e5+10;constintM......
  • 主席树(更新)
    主席树学习(无详细讲解过程,因为思想很简单)目录主席树学习背景:可持久化线段树(主席树)模板:静态区间第k大更多应用:(其实就是加了一点其他模板)和树dfs一起出:一些总结:更新内容(2023/10/25)区间修改(持久化tag)背景:sensi:今天咱们做一下优化dp,你们看看这个简单题。https://www.luogu.c......
  • 主席树初步
    什么是主席树主席树即可持久化线段树这边其实我目前感觉就是支持查询历史版本的线段树原理每当线段树修改时,维护其过去的版本,将其复制下来(然后就MLE了改进:对集合的每一个版本维护一个单独的根,在修改数据时,只复制树的一部分(复制一张别人的图Orz)建树类似......
  • 主席树
    权值线段树思路:现将数值离散化每个节点存的是值在\(l\)~\(r\)之间的数的个数,用线段树维护作用:求\(k\)小值或\(k\)大值查某一数值的排名查询数组排序查前驱、后继求逆序对相比平衡树:码量小、简单P1801黑匣子离散化:sort(alls.begin(),alls.end());alls.eras......