支持修改主席树

可持久化线段树(主席树) 摘要 主席树,又称可持久化线段树,属于可持久化数据结构。“主席”这一名词是由于发明者缩写为HJT,和某位主席拼音缩写相同(有些牵强),故将该数据结构称为主席树。 主席树既保留了线段树的灵活,也拥有了可持久化数据结构的特点,在处理某些特定问题时有着其它数据结构不具有的优势。 本文将首先介绍什么是“可持久化数据结构”,随后介绍主席树的思想,关于代码实现将结合例题讲解。 可持久化数据结构 可持久数据结构... 阅读详情

主席树很经典,一般的”k-th number”问题都用它来解决,
主席树的内存存储与可持久化线段树差不多,
但如果要兹瓷修改呢?把有关的点都改一遍?

兹瓷修改主席树

觉得兹瓷修改主席树与主席树没有太大的关系

用树套树来实现,
内存上的存储外面是树状数组,套一个线段树,(注意,是线段树)
修改就和树状数组的求和修改差不多,只是把普通的加减修改变成了修改对应的线段树,
查询时,我们是先走线段树,再在线段树中做树状数组,
先用数组记录一下[1,l-1]和[1,r]中的在树状数组中的根,也就是对应的区间,
对于线段树中的一个区间,我们已知每棵线段树当前区间内的个数,用树状数组求和,就可以得出[1,mid]和[1,r]这两个区间的个数,于是就可以判断是往左走还是往右走,再对应的把记录的数组中所有的区间往左或往右走即可,

复杂度:O(nlog2(n));

Key Code


void change(int l,int r,int &e,int l2)
{
    if(!e)e=++b0;b[e].s++;
    if(l==r)return;
    int t=(l+r)/2;
    if(l2<=t)change(l,t,b[e].l,l2);
        else change(t+1,r,b[e].r,l2);
}
void modify(int q,int e)//在树状数组上修改
{
    for(int i=q;i<=n;i+=NX(i))change(1,n,root[i],e);
}
int HOW(int q)//统计区间个数
{
    int ans=0;
    fo(i,1,h[q][0])ans+=b[b[h[q][i]].l].s;
    return ans;
}
int find(int l,int r,int l2)
{
    if(l==r)return l;
    int t=(l+r)/2;
    int t1=HOW(1)-HOW(0);
    if(l2<=t1)
    {
        fo(j,0,1)fo(i,1,h[j][0])h[j][i]=b[h[j][i]].l;//把整个记录数组往左走
        return find(l,t,l2);
    }
    fo(j,0,1)fo(i,1,h[j][0])h[j][i]=b[h[j][i]].r;//往右走
    return find(t+1,r,l2-t1);
}
int search(int l,int r,int l2)//记录数组先指向根
{
    h[0][0]=h[1][0]=0;
    for(int i=r;i;i-=NX(i))h[1][++h[1][0]]=root[i];
    for(int i=l-1;i;i-=NX(i))h[0][++h[0][0]]=root[i];
    return find(1,n,l2);
}
【阅读文献笔记】FoundationStereo: Zero-Shot Stereo Matching 提出首个零样本泛化立体匹配基础模型设计 STA 模块融合单目先验提出 AHCF 模块增强代价滤波构建 100 万合成数据集 FSD + 自净化流程。 阅读详情

相关推荐

Simulink中扩张状态观测器ESO搭建与参数整定实战

扩张状态观测器(ESO)是自抗扰控制(ADRC)的核心,用于估计系统总扰动并实时补偿。其原理是将扰动扩张为状态变量,通过观测器带宽配置增益,实现扰动估计。在Simulink中搭建ESO可直观验证连续与离散域性能,解决参数整定与噪声折中问题。典型应用包括运动控制、电力电子和机器人驱动。本文基于MATLAB/Simulink,详细讲解线性ESO的模型结构、参数计算、离散化实现及常见问题排查,帮助读者从零搭建并调试ESO仿真。

weixin_34116482的博客 224

HDU 4348主席树区间修改

如何区间修改: 首先,我们不能进行线段树上的pushdown操作。因为这样做会让公共节点的值被修改。导致其他版本的线段树在查询时出现错误。 对于每一次区间修改操作,我们让落在L<l&&r<=R区间上的新开的节点的儿子为历史版本的节点,我们可以把这样的节点理解为分界点。因为修改区间将这段区间覆盖之后,它的孩子节点必然需要新开节点。 对新开的节点,除了孩子为旧节点的新开节点不需要pushup之外,其他的节点都需要pushup。 既然不能pushdown,那我们就在query函数中多

myvanilla1的博客 1181

Seurat 单细胞转录组测序数据分析教程(三)——python(scanpy)

文章参考至,做了一个更详细的解读。本教程探讨了 scanpy 的可视化可能性,分为三个部分:嵌入的散点图(例如 UMAP、t-SNE)使用已知标记基因鉴定簇差异表达基因的可视化在本教程中,我们将使用来自 10x 的数据集,其中包含来自PBMC的 68k 个细胞。Scanpy 在其分布中包括该数据集的简化样本,该数据集仅包含 700 个细胞和 765 个高度可变的基因。该数据集已经过预处理和 UMAP 计算。在本教程中,我们还将使用以下文献标记:B细胞:CD79A、MS4A1。

coffeeii的博客 5828

[Data]带修改的主席树[树状数组套主席树]

树状数组套主席树 树状数组的每个节点维护的是一段区间,我们将每个区间构造成一棵线段树,这时候如果我们要修改一个值,只需要修改logn个节点即可, 时间复杂度为log^2(n),树状数组维护的区间是数的个数n;离散化时是把所有数(包括要修改的数)全部离散化; 1.修改 在修改之前,我们应先把序列里原来的值在主席树对应节点+1(主席树里维护的是某个数出现的次数),遍历logn棵主席树。在修...

weixin_30522183的博客 203

Yolov8-pose关键点检测:loss优化 | LRM loss困难样本挖掘,提升难样本、遮挡物等检测精度

LRM loss应用到能够大幅提升pose遮挡物性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1716

【深度学习新浪潮】AI 智能眼镜关键视觉技术、技术栈及开源项目全解析

Meta新款智能眼镜在演示中暴露出的AI误判和延迟问题,揭示了端侧视觉与多模态算法落地的核心瓶颈。本文从算法工程视角解析了AI智能眼镜的三大关键技术:感知增强(多帧降噪、HDR成像)、场景解析(轻量化目标检测、语义分割)和空间定位(视觉SLAM、ToF辅助),并梳理了完整的技术栈架构,包括硬件适配、驱动优化和框架选型。文章还提供了高价值开源项目参考,如OpenXR和ORB-SLAM3,为端侧视觉算法落地提供实操指南,助力开发者攻克算力约束下的实时性、精度和功耗平衡难题。

专注:太空算力、AI infra、异构调度、大模型成本工程 530

主席树模板(带修改)

P2617 Dynamic Rankings 显然单单写一个主席树是不够的,主席树可以维护的是静态区间第k大。本题要求动态修改,所以考虑带修改的主席树怎么写。 首先很显然一个小thick是,我们把修改的部分和原本静态的分开,单独形成新的主席树。这样的好处有很多:处理方便,思路清晰,更好理解题目。 如果暴力修改的话,每次修改一个点,我们最多需要修改n棵线段树。所以复杂度太高,无法接受。其实带修改的...

Destiny 1091

使用MATLAB求解二维顶盖驱动流问题的详细代码和说明

本文介绍了使用MATLAB求解二维顶盖驱动流问题的涡量-流函数方法。代码采用129×129网格,雷诺数Re=1000,通过迭代求解Navier-Stokes方程,包含流函数方程和涡量输运方程的离散求解。程序实现了边界条件处理、收敛性检查,并提供丰富后处理功能:流线图、涡量分布图、中心线速度曲线、矢量图和三维涡量可视化。计算结果可与Ghia等(1982)的经典数据进行验证。该代码完整展示了CFD问题的数值求解流程,包括参数设置、主循环计算和多种结果呈现方式,适用于流体力学教学和科研验证。

AI的内部世界的博客 226

最详细的主席树(不修改,待修改) BZOJ 1901

By Bartholomew 前置知识: 1.树状数组 2.线段树 主席树 模板是干什么的,其实就是询问区间第k大 不支持修改: 复杂度O(nlogn)O(nlogn)O(nlog_n) 带修: 复杂度O(n∗(logn)2)O(n∗(logn)2)O(n * (log_n)^2) 分析: 请大家耐心看完下面一道题目的做法,因为跟主席树的关系很大 引题 ...

Bartholomew_的博客 9533

2023华为OD机试真题B卷 Python 实现【最长的元音子串长度】

定义当一个字符串只有元音字母(a,e,i,o,u,A,E,I,O,U)组成,称为元音字符串,现给定一个字符串,请找出其中最长的元音字符串,并返回其长度,如果找不到请返回0, 字符串中任意一个连续字符组成的子序列称为该字符串的子串

MISAYAONE的博客 902

Pytorch实现之SRGAN+CBAM的结构设计

在SRGAN的残差连接中加入了CBAM注意力机制,同时设计了四类损失来训练。

LJ1147517021的博客 571

[模板] 带修改主席树

我就算去学整体二分,CDQ分治,也不学树套树。树套树真好用。 带修改主席树 我相信来看带修改主席树的应该自认为对主席树很是了解,如果还没深刻理解请不要看继续看下去了,因为那样就算学了也无法深刻理解。 首先我们来分析一下主席树,它是权值线段树+离散化+再加动态开点,使空间复杂度和时间复杂度都降到了\(nlogn\)。那么如果带一个单点修改该怎么办?我们就想到了支持单点修改,区间查询的...

weixin_30364147的博客 129

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

主席树模板(支持修改)

#include&lt;bits/stdc++.h&gt; using namespace std; const int N=2e6+10; int n,m,sz,tot,a[N],b[N],rt[N],s[N],ls[N*30],rs[N*30],sum[N*30],rootl[40],rootr[40],cntl,cntr; struct Que{ int opt,i,j,k; }q...

Destiny 380

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

支持修改的主席树,例题:zoj2112

一些名字和解释:传送门 例题:zoj2112 代码:#include <bits/stdc++.h> #define ll long long using namespace std; const int N=60060; int cnt,n,m,x,y,k,tmp,root[N],spt[N],a[N]; int cmp; struct node{int l,r,sum;}T[N*40]; s

妍恐龙的博客....^~^眼熟我 613

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ZOJ 2112 Dynamic Rankings 树状数组套主席树 单点修改求动态区间第K大

题目大意: 就是给出一个数列之后进行两种操作: 1. 询问从第l个数到第r个数中的第k小的数 2. 修改某个位置的数为t 大致思路: 主席树学习第二题... 就是对原序列建立主席树然后用树状数组来维护另外一颗主席树来表示原主席树的变化 因为每次修改都会导致需要修改一整段线段树, 那么考虑用树状数组维护, 每个位置都是一颗线段树, 这些线段树的前缀和就是对应位置的变化, 在递归

Gatevin的专栏 1674

主席树详解(基础)

可持久化线段树,又称主席树,本文详解它的构成和基础用法

nxhx_的博客 4661

有关主席树

可持久化数组*可持久化权值线段树。

2509_93020071的博客 909

肥宅快乐主席树

文章目录静态主席树算法理解例题讲解例题思路主席树?前缀和?插点linkmerge快乐加减完整代码练习树上第k小毒瘤逆序对求区间种类简单询问简单查询矩阵主席树大暴力!!!动态主席树讲解例题算法讲解代码练习不是动态主席树的带修题。可持久化主席树例题思路单点修改区间修改代码小结 静态主席树 算法理解 例题 时间限制: 1 Sec 内存限制: 128 MB 【问题描述】 给n(1<=n<=1...

蒟蒻QMQ 280

ZOJ 2112 Dynamic Rankings(主席树套树状数组+静态主席树)

题意:给定一个区间,求这个区间第k大的数,支持单点修改。 思路:主席树真是个神奇的东西.........速度很快但是也有一个问题就是占用内存的很大,一般来说支持单点修改的主席树套树状数组空间复杂度为O(n*logn*logn), 如果查询较少的话,可以初始的时候用一颗静态主席树,这样空间复杂度可以降为O(n*logn+q*logn*logn),勉强可以过zoj这道题。 这道题看了好久好久才懂.

GODSPEED 4891

主席树入门详解

简介 主席树全称应为可持久化权值线段树,可用于解决区间第k小问题。但可能由于这个的影响力比较大,现在主席树也被泛指为可持久化线段树。 主席树树是由NOI选手黄嘉泰(HJT,咱也不敢说)首先使用的。黄嘉泰原话:“这种求k 大的方法(函数式线段树)应该是我最早开始用的”。 可持久化线段树 可持久化数据结构 (Persistent data structure) 是可以保留每一个历史版本,并且支持操作的不可变特性 (immutable)。 可持久化线段树即保留多个历史版本(第k个版本即第k次修改后,第k+1次版本

SCUEC__zhazhahui的博客 1348

【树状数组套主席树超详细讲解】

本文详细介绍了动态区间第K小问题的解决方案——树状数组套主席树。静态区间第K小可用主席树解决,但无法直接处理修改操作。通过将树状数组与主席树结合,外层用树状数组维护权值线段树,内层用动态开点线段树记录权值分布,实现了高效的动态更新和查询。每次更新和查询的时间复杂度均为O(log n * log m)。该方案虽能解决问题,但实现复杂且空间消耗大。文章还对比了整体二分等替代方案,并分析了应用场景,为理解这一数据结构提供了全面指导。

your_father_zyz的博客 1076

主席树总结

/* 主席树的本质就是前缀的权值线段树 维护n个权值线段树,第i个权值线段树表示[1...i]这些数构成的权值线段树 对于第i个权值线段树,只需要用第i-1的根,再维护那个改变的值,所用的空间为log 查询区间第k小时用R的权值线段树减去L-1的权值线段树即可 */ //静态区间第k大 #include <iostream> #include <vector> #include <algorithm> using namespace std; const in

weixin_44316314的博客 206

主席树

又双叕是一个被我咕了很久的知识) (我不爱数据结构) 板子题 一、主席树 又叫可持久化线段树 支持点修改和区间询问 图中橙色节点为历史节点,其右边多出来的节点是新节点 二、数据结构 主席树的点修改: 不同于普通线段树,主席树的左右儿子节点编号并能够通过计算得到,所以应该记录下来 主席树的询问: 类似于线段树 三、复杂度 修改O(log...

weixin_30701575的博客 108

带修改的区间第k小(树状数组套主席树)

赵队牛逼!!!!! 题目链接 题目内容 对一个序列进行两种操作: 修改第iii个数为xxx 查询区间[l,r][l,r][l,r]第kkk小的数 分析 对于不待修改的区间第kkk小,我们可以用主席树完成。 我们来看看只用主席树如何完成带修改的区间第kkk小。 对于每次修改,我们都需要把当前位置及以后的主席树都进行修改。因此每次修改的时间复杂度为O(nlog(n))O(nlog(n))...

WA_King的博客 660

【树套树】 带修主席树

Algorithm Task 给定一个长度为 \(n\) 的序列,要求支持单点修改和区间 \(kth\) 查询,强制在线。 Limitation 如果认为输入数据全部与 \(n\) 同阶,要求算法时空复杂度 \(O(n \log^2n)\) Solution 其实这个东西和可持久化线段树没有半毛钱关系,实质上就是树状数组套权值线段树 考虑如果不带修,那么可以直接主席树解决。主席树的本质是...

weixin_30432007的博客 277
上一篇: 【Codeforces 678E】Another Sith Tournament &【JZOJ 4648】锦标赛
下一篇: 【JZOJ 4678】钱仓
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值