首页 > TAG信息列表 > 主席

主席树

可持久化线段树,可以有3个维护属性(对问题的转化):P1:树的权值(下标)P2:树的每一个历史状态(前缀和思想)P3:树的维护的值(sum,max等等)

7.11 可持久化(主席树)

\(\large\text{Date: 7.11}\) 可持久化 这个东西,能够维护一个数据结构的历史状态,主要做法就是(树状数据结构)开很多根对应不同版本的历史状态,然后每次修改就备份发生变化的节点,剩下的地方不变。可持久化主要是对空间有较大的优化。比如要开非常多棵线段树而空间会炸的时候就可以考虑

主席树

模板题:静态区间的第k小 主席树:可持久化线段树,可以支持查询历史版本的线段树。 在模板题中,对数组的每一个前缀建立一棵权值线段树,线段树的每一个节点维护属于区间\([l,r]\)的数的个数。 对于询问\([l_i,r_i]\)中的第\(k_i\)大的数,利用前缀的思想,版本\(r_i\)与\(l_{i-1}\)之间的差就

主席树模板

可持久化线段树 2 题意: 给一数组 多次询问一个区间 求该区间第k大的数 n和q都可以到达2e5 思路: 每次查询 直接暴力找第k大的数肯定会超时 然而如果用普通线段树 因为每次查询的k不一样就要维护很多棵树会爆空间 所以要用主席树 每次更新一个数就添加一个根节点 只更新维护的区间中

【主席树】【模板】

【主席树】【模板】 刚学主席树,理解还不是很深,先粘一下板子吧。 模板1 Code #include<bits/stdc++.h> using namespace std; inline int read() { register int x=0,w=1; register char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-') ch=getchar(

主席树(非权值)

int n;const int N=4e5;const int LOGN=22; namespace ST{ const int M=N*LOGN; int son[M][2],ct[M]; int node_count; int new_node(int ls,int rs,int cnt){ int t=++node_count; son[t][0]=ls; son[t][1]=rs; ct[t]=cnt;

主席树学习笔记

主席树 主席树,又称可持久化线段树,主要思想在线段树上加上一些历史节点去维护一些历史数据,实现对过去数据的查询。 去盗了一张图 途中橙色的节点维护的就是历史数据。 主席树的用处 引用大佬的一段话: 主席树就是利用函数式编程的思想来使线段树支持询问历史版本、同时充分利用它们

主席树Ⅱ

神秘数 一道算是十分巧妙的题目。 与其它许多题目一样,一开始并不会想到用什么主席树,那些都只是后来用来做优化的东西。让我们来思考一下,假如给一个数列,然后只有一次询问的话应该怎么办?排一下序,然后从小到大扫描。从小往大扫描的过程中,如果当前可以表示的范围是 \([1,able]\) ,当前

区间修改主席树

逆十字巨巨的代码 保存一下 #include<bits/stdc++.h> using namespace std; vector<int> v1[300010],v2[300010];//两张图 int T,n,x,y,dep[300010],rt[300010],tot,L[300010],R[300010],ans;//T,x,y struct node{int ls,rs,ma,laz;}t[25000010]; void getdfn(int x,int fa=0)

【模板】主席树

      1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=200011,M=N<<5; 4 int n,m,a[N],b[N],num,tot,rt[N]; 5 int cnt[M],ch[M][2]; 6 7 inline int re_ad() { 8 char ch=getchar(); int x=0,f=1; 9 while(ch<'0&

麒麟信安董事长杨涛当选长沙市工商业联合会(总商会)第十五届执行委员会副主席(副会长)

5月31日,长沙市工商业联合会(总商会)第十五次代表大会召开。省委常委、市委书记吴桂英,省政协副主席、省工商联主席张健出席并讲话。市委副书记、市长、湖南湘江新区党工委书记郑建新、市领导谢卫东、文树勋、谭小平、李蔚出席。 大会选举了新一届市工商联(总商会)领导班子,麒麟信

主席树

USE1 区间询问第K大值 单次\(O(logn)\) 例如: 3 1 9 2 8 先离散化: 3 1 5 2 4 再列出桶(存各元素出现次数): 1 2 3 4 5 1~1: 0 0 1 0 0 1~2: 1 0 1 0 0 1~3: 1 0 1 0 1 1~4: 1 1 1 0 1 1~5: 1 1 1 1 1 桶的空间\(n^2\)太大怎么办? 再建主席树: 空间不

主席树的一些理解

前言: 很早之前写过主席树的模板,但因为没遇到过用主席树的题(做题太少 ),太久没写,就忘了。 于是,今天又学了一遍主席树,有了一点新的理解。 1,离散化。 for (int i = 1; i <= n;i++) { cin >> v[i]; pos.emplace_back(v[i]); } sort(pos.begin(), pos.end()); pos.erase(u

255. 第K小数(主席树)

给定长度为 N 的整数序列 A,下标为 1∼N。 现在要执行 M 次操作,其中第 i 次操作为给出三个整数 li,ri,ki,求 A[li],A[li+1],…,A[ri] (即 A 的下标区间 [li,ri])中第 ki 小的数是多少。 输入格式 第一行包含两个整数 N 和 M。 第二行包含 N 个整数,表示整数序列 A。 接下来 M 行

主席树模板

5.3解锁新姿势 弱弱也会主席树啦 题目:查找区间第K小 #include<iostream> #include<vector> #include<algorithm> #include<cstring> using namespace std; const int N=100010; struct Node{ int l,r; int cnt; }tr[N*4+N*17]; vector <int> num; int a[N],idx,r

主席树模板

#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int N = 2e5 * 20; int a[N], b[N], root[N]; struct President_Tree { int idx; struct node { int l, r, data; }tr[N]; inline void

主席树模板

#include<cstdio> #include<cstring> #include<algorithm> #define mid (l+r)/2 using namespace std; const int N = 200010; int n, q, m, cnt = 0; int a[N], b[N], T[N]; int sum[N<<5], L[N<<5], R[N<<5]; inline int build(int l

【算法 - 数据结构】主席树

const int MAXN = 2e5 + 10; int a[MAXN]; int val[MAXN]; #define mid ((l + r)>>1) int L[MAXN << 5]; int R[MAXN << 5]; int cnt[MAXN << 5]; ll sum[MAXN << 5]; int T[MAXN], tcnt; int iBuild(int l, int r) { int rt = ++tcnt;

马云谈数字经济一语道出特点

马云谈数字经济一语道出特点 马云谈数字经济 刚刚,联合国发布全球数字经济未来发展纲领性报告——《数字相互依存的时代——联合国数字合作高级别小组报告》,作为联合主席的马云在现场这么说到。 这份报告,是马云在联合国上任数字合作高级别小组联合主席后,花了9个月做出的一个大

百年未有之大变局,时与势在我们这边

  2021年是新的一年,也是中国“十四五”新开局的一年。主席总书记指出:“进入新发展阶段、贯彻新发展理念、构建新发展格局,是由我国经济社会发展的理论逻辑、历史逻辑、现实逻辑决定的。进入新发展阶段明确了我国发展的历史方位,贯彻新发展理念明确了我国现代化建设的指导原则,构建新

主席树模板

应用场景 静态: 查询区间第K大 动态: 带修改的查询区间第K大 静态 P3834【模板】可持久化线段树 1(主席树) 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define clr(a, x) memset(a, x, sizeof(a)) 4 #define rep(i,a,n) for(int i=a;i<=n;i++) 5 #define pre(

线段树及主席树

文章目录 线段树及主席树个人理解线段树理解线段树模板主席树理解(可持久化线段树)问题 A: 敌兵布阵题目描述输入输出样例输入样例输出代码 问题 B: 最大数题目描述输入输出样例输入样例输出代码 问题 C: Distinct Characters Queries(英文题面)(线段树)题目描述输入输出样例

【笔记】主席树学习笔记

主席树笔记 学习博文:主席树总结 静态区间第 k 小问题 P3834 【模板】可持久化线段树 2(主席树) 题意 给出一个序列,每次询问给定区间内第k小的值。 思路 主席树模板。 考虑最简单的情况,也就是查询区间固定。首先对数据进行离散化,用线段树维护。每个节点对应离散化后值域的数的总个数

主席树 入门

思想类似前缀和,访问某状态的线段树可通过末减初状态进行求解。 hdu4417 第二道模板题 有很多细节需要注意。 1.题目给定ai的高度可能为0,但通过离散化事实上不影响结论。 2.给定的访问区间[x,y]以及高度h也可能为零,因而x,y需对应++。查询依旧是root[y] - root[x-1]。 3.对于高度h,为

主席树模板之历史版本

P3919 【模板】可持久化线段树 1(可持久化数组)        AC_Code: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=1e6+10; 5 const int mod=1e9+9; 6 7 struct Tree{ 8 int l,r,v; 9 }tree[maxn*40]; 10 11 in