可持久化数组(主席树基础)

可持久化线段树(主席树)及可持久化数组 定义:可以访问历史版本的线段树为可持久化线段树 B站讲解视频:【AgOHの数据结构】主席树 可持久化线段树之所以可以访问历史版本,是因为宏观上看,它为每个版本维护了一棵树。当然,如果真的对每个版本建一颗树,时间空间复杂度都hold不住。所以建立i版本的树时,如果某颗子树相对于i-1版本没有变化,就可以直接使其父亲对应的指针指向i-1版本的这颗子树。 主席树更多的用于单点更新问题,可以为每一次更新后的版本建立一棵树,递归更新的过程中,先令当前节点等于上一个版本的节点,如果某个子树要更新,则新开一个空间存放. 阅读详情

题目链接

大概是知道了可持久化是什么意思了
代码:

#include<stdio.h>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<vector>
#include<set>
#define maxx 1000005
using namespace std;
int a[maxx];
int n;
class CMT
{
private:
    struct Node
    {
        int x,l,r;
    }node[maxx*45];
    int query(int s,int l,int r,int tar)
    {
        if(l==r)return node[s].x;
        int mid=(l+r)>>1;
        if(tar<=mid)return query(node[s].l,l,mid,tar);
        else return query(node[s].r,mid+1,r,tar);
    }
public:
    int root[maxx],cnt;
    void build(int &s,int l,int r)
    {
        s=++cnt;
        if(l==r)
        {
            node[s].x=a[l];
            return;
        }
        int mid=(l+r)>>1;
        build(node[s].l,l,mid);
        build(node[s].r,mid+1,r);
    }
    void insert(int &s,int l,int r,int y,int tar,int val)
    {
        s=++cnt;
        node[s]=node[y];
        if(l==r)
        {
            node[s].x=val;
            return;
        }
        int mid=(l+r)>>1;
        if(tar<=mid)insert(node[s].l,l,mid,node[y].l,tar,val);
        else insert(node[s].r,mid+1,r,node[y].r,tar,val);
    }
    int ask(int i,int vi,int x)
    {
        root[i]=++cnt;
        node[cnt]=node[root[vi]];
        return query(root[i],1,n,x);
    }
}cmt;
int main()
{
    int m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)scanf("%d",a+i);
    cmt.build(cmt.root[0],1,n);
    int x,y,z,t;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        if(y==1)
        {
            scanf("%d%d",&z,&t);
            cmt.insert(cmt.root[i],1,n,cmt.root[x],z,t);
        }
        else
        {
            scanf("%d",&z);
            printf("%d\n",cmt.ask(i,x,z));
        }
    }
    return 0;
}

HDU 4348. To the Moon【可持久化树状数组】 http://acm.hdu.edu.cn/showproblem.php?pid=4348 #include #include #include #include #include #include using namespace std; const int maxn = 100010; int n, m; struct Node { long long d, 阅读详情

相关推荐

可持久化线段树(主席树)

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

帅比王的博客 4662

深刻理解树状数组

从构造原理的方面简单直观地深刻理解树状数组,不再死背代码。

wanglianda2007的博客 1038

可持久化数据结构

可持久化数据结构研究,线段树,块状链表,区间第k大等等

【可持久化线段树】【树状数组】[ZOJ 2112]Dynamic Rankings

题目大意:带修改操作的区间第K大 首先可以发现因为只有在需要使用的时候才会新建节点那么最多有nlogn个节点,那么只需要在更新的时候带上值域就可以不用进行离散化了,每一次就是和普通的树状数组那么进行更新,因为求得是区间的和(大概就是可持久化的原理)但是用树状数组来做每一个更新的时候就有了求前缀和的范围,每一次加起来就好了,其实和普通的树状数组差不多的。(注意是多组数据) #...

weixin_30376163的博客 205

【故障排查】telnet连接失败:端口23不可达的深度分析与解决方案

本文深度剖析了telnet连接失败,特别是端口23不可达的常见原因与系统性解决方案。文章从客户端本地配置、服务器端服务与防火墙、中间网络路径三个层面,提供了详细的排查步骤与命令,并强调了Telnet协议的安全风险,建议使用SSH等更安全的替代方案进行远程管理与端口测试。

weixin_29306011的博客 894

【各种轮子2】基于Icepak的PCB散热仿真比较

随着电子产品的集成度越来越高,PCB板的尺寸越来越小,板级芯片散热的问题越来越成为电子工程师的一个重要挑战。对于板级芯片散热,主要依靠工程师对PCB自身的设计进行优化,同时要兼顾系统的尺寸和成本。本文分别从芯片角度和PCB角度进行建模,芯片模型选用QFN封装,PCB模型采用走线导入模型,探讨了芯片结构,PCB铜厚,PCB叠层厚度对芯片散热的影响。

3668

可持久化线段树 主席树 详解

可持久化线段树 主席树 详解 一、可持久化线段树 简介 可持久化线段树,顾名思义,即对线段树进行可持久化处理之后的线段树。 在可持久化数据结构的理论中,我们对可持久化的概念有所了解:“可以返回之前的某个状态,并在该基础上进行修改”。

HeartFireY的博客 2416

UE4/5编译报错MSB3073终极解决指南:从路径检查到MSVC版本降级

本文针对UE4/5开发中常见的MSB3073编译报错,提供了一套从根源到实战的终极解决指南。文章系统性地讲解了错误成因,并分层次指导排查路径字符、环境变量、MSVC版本兼容性、权限冲突等核心问题,重点介绍了通过降级MSVC编译器版本等关键操作来彻底解决此编译难题。

rl6adventurer的博客 1430

可持久化线段树【主席树】详解

首先科普下为什么叫主席树呢,这是因为主席树的创始人是一位叫做黄嘉泰的大佬,然后这位大佬名字的缩写是HJT,和某位伟人的名字缩写一样....haha,所以就有了主席树这个说法啦。 其实网上已经有很多博主写了关于主席树详解的博客了,但是我自己为什么还要手敲这样一份主席树教学呢?因为我在刚学主席树的时候,也是看了很多博主写的入门教程,但是没有任何单独一份就能让我搞明白什么是主席树,让我吃了很多苦头,所...

KnightHONG的博客 1794

直流耦合系统介绍

参考《SMA如何使用直流耦合技术实现更高效的光伏电站-白皮书》

圆桌骑士的博客 731

山石网科Hillstone防火墙基础上网配置_CLI命令行(最新版)

山石网科Hillstone防火墙安全网关基础上网基础网络配置_CLI命令行(最新版)

路与肥的博客 1万+

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

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

your_father_zyz的博客 1076

新手必看:SMIC 0.18um PDK安装保姆级教程(附Cadence IC617环境配置)

本文提供SMIC 0.18um PDK在Cadence IC617环境下的详细安装教程,涵盖环境准备、文件解压、安装脚本运行、环境变量配置及Cadence集成验证等关键步骤,特别针对初学者常见问题提供解决方案,助力快速掌握芯片设计工具配置。

weixin_30522183的博客 488

可持久化线段树解释(又叫主席树,可持久化数组)洛谷3919 3402

因为我是菜鸡,如果有说错的话,恳请大佬们指出 QAQ 本文分为以下几部分: 一:名称的由来 二:原理解释 三:代码怎么写 四:例题 名称的由来 首先,可持久化线段树,分为:可持久化+线段树。 可持久化就是历史信息回顾的意思。比如每次操作我都让某个数改变,那么我想回顾第k次操作,第i个是什么数应该怎么做呢?naive的做法就是我每改变一个数都复制一次这个数组就可以了,但是我们发现其实...

FrostMonarch的博客 413

27、物联网中的量子密钥分发:安全通信新范式

本文探讨了物联网(IoT)快速发展所带来的安全挑战,并提出量子密钥分发(QKD)作为应对新兴威胁的新范式。文章详细介绍了QKD的基础原理、BB84协议的实现流程以及其在物联网中的应用前景,同时强调了安全专业人员提升技能、制定标准化指南以及跨学科合作的重要性。通过利用量子力学特性,QKD能够提供更高的通信安全性,抵御量子计算等未来威胁,为物联网的安全发展提供保障。

tequila的博客 155

基于 Simulink 的 PFC + LLC 级联系统联合仿真与优化实战教程

摘要:本教程详细介绍了2kW级AC-DC变换器建模方法,采用"BoostPFC+LLC谐振变换器"组合架构。重点解析了双级系统的核心控制策略:前级BoostPFC实现功率因数校正(PF>0.95),后级LLC通过变频调制(PFM)实现高效能量传输。教程包含四大关键步骤:PFC建模与控制、LLC参数计算与实现、母线电容优化设计以及系统联合调试,特别针对级联系统常见的母线电容震荡问题提供了解决方案。同时给出了仿真波形分析指南和避坑建议,包括代数环处理、仿真步长设置等实用技巧,为新能源车

MHD0815的博客 118

【数据结构】可持久化线段树(主席树)

即为,是一种可以记录每一个修改版本的数据结构。难以进行区间的修改操作主席树存储的信息下面以图示表示主席树记录修改的过程。

Texcavator的博客 1296

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

可持久化线段树--主席树

洛谷P3834 题目背景 这是个非常经典的可持久化权值线段树入门题——静态区间第 kk 小。 数据已经过加强,请使用可持久化权值线段树。同时请注意常数优化。 题目描述 如题,给定 nn 个整数构成的序列 aa,将对于指定的闭区间 [l, r][l,r] 查询其区间内的第 kk 小值。 输入格式 第一行包含两个整数,分别表示序列的长度 nn 和查询的个数 mm。 第二行包含 nn 个整数,第 ii 个整数表示序列的第 ii 个元素 a_ia i ​ 。 接下来 mm 行每行包含三个整数 l, r, kl,r,

liamaking的博客 404

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[主席树/可持久化线段树] 主席树讲稿

第一次讲课哦,心里还是有一点小激动 前置知识 线段树 线段树2 线段树3 (重点不在这儿)

Antimonysbguy的博客 267

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

trie树(三) 可持久化

那么每次为了精确遍历一个区间[l,r]的01trie,我们会在插入时给每一个节点标上一个tag,代表它最晚是什么时候插入的(或者是共用),记为last[i],那么只要last[i]>=l即可。这个想法很明显不成熟,所以我们加以改进,尝试充分利用空间,那么自然会想到可持久化,在之前的历史版本上加入一条新的链代表一个数即可。里学过的01trie,但是普通的01trie是针对一整颗树求最大异或值的,而此题很明显是在对区间进行询问。所以,我们可以对每一个区间都建一颗01trie!看到异或最大值,不难想到我们在。..

sophilex的博客 389

可持久化全解

可持久化数据结构相关, 涉及到主席树,可持久化并查集,可持久化线段树,可持久化平衡树

C_eeking的博客 834

可持久化线段树(主席树)学习笔记

0x00写在前面 在接触可持久化线段树前一直以为这是一个高大上的东西,非常复杂.但是在学习之后才发现它远比想象中容易,甚至比线段树还简单,所以学的时候不要有心理压力. 0x01从一道题开始 洛谷P3834 题意:给你一个序列,多次询问区间第k大的数是多少(序列长度与询问个数为1e5级别) 可以考虑这样一种算法:对于每个前缀[1,i][1,i][1,i]维护一颗权值线段树,每次询问[l...

qq_16267919的博客 303
上一篇: 【2019 Multi-University Training Contest 3 】【HDU 6604】Blow up the city(支配树)
下一篇: 【HDU 6607】Easy Math Problem(杜教筛+min25筛+拉格朗日插值)
coldfresh
博客等级 码龄10年 107粉丝 405原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值