【模板】可持久化线段树 1(可持久化数组)

【模板】可持久化数组 戳我 可持久化数组是由可持久化线段树或可持久化平衡树实现的。这里先给出可持久化线段树的实现方法。 为了方便起见,处理的数组长度为5, 起始的数组元素为1~5,修改是将第一个位置的数组元素改为2。 建树规则很简单,只要在叶子节点上写上该点的值就可以了。 先根据原数组建一棵线段树 第一次修改之后的线段树 我们发现,这两棵线段树中只有一个叶子节点的值发生了改变,而操作数非常多,假... 阅读详情
题目链接https://www.luogu.com.cn/problem/P3919
代码
#include<iostream>
#include<string>
#include<map>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<stack>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define best 131 
#define INF 0x3f3f3f3f
#define P pair<int,int>
#define ls p<<1
#define rs p<<1|1
using namespace std;
const int N=1e6+10;
int r[N],a[N],top;
struct node
{
	int l;
	int r;
	int v;
}t[N<<5];
int clone(int p)
{
	++top;
	t[top]=t[p];
	return top;
}
int build(int p,int l,int r)
{
	p=++top;
	if(l==r)
	{
		t[p].v=a[l];
		return top;
	}
	int mid=(l+r)>>1;
	t[p].l=build(t[p].l,l,mid);
	t[p].r=build(t[p].r,mid+1,r);
	return p;
}
int update(int p,int l,int r,int pos,int v)
{
	p=clone(p);
	if(l==r)
	{
		t[p].v=v;
	}
	else
	{
		int mid=(l+r)>>1;
		if(pos<=mid) t[p].l=update(t[p].l,l,mid,pos,v);
		else t[p].r=update(t[p].r,mid+1,r,pos,v);
	}
	return p;
}
int query(int p,int l,int r,int pos)
{
	if(l==r)
	{
		return t[p].v;
	}
	int mid=(l+r)>>1;
	if(pos<=mid) return query(t[p].l,l,mid,pos);
	else return query(t[p].r,mid+1,r,pos);
}
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	r[0]=build(0,1,n);
	for(int i=1;i<=m;i++)
	{
		int id,op,pos,v;
		scanf("%d%d%d",&id,&op,&pos);
		if(op==1)
		{
			scanf("%d",&v);
			r[i]=update(r[id],1,n,pos,v);
		}
		else
		{
			printf("%d\n",query(r[id],1,n,pos));
			r[i]=r[id];
		}
	}
    return 0;
}
保姆级教程:Halcon 3D点云匹配与差异分析避坑指南(从采样到可视化) 本文提供了一份详细的Halcon 3D点云匹配与差异分析实战指南,涵盖从模型准备到可视化的全流程。重点解析了STL文件读取单位误区、点云采样密度优化、表面模型创建技巧以及差异分析的专业手法,帮助用户避开常见陷阱,提升工业检测效率与精度。 阅读详情

相关推荐

Confluence安装Drawio插件

记录confluence安装drawio插件步骤

devotedwife的博客 7377

洛谷P3919 【模板】可持久化线段树 1(可持久化数组)

此外,每进行一次操作(对于操作2,即为生成一个完全一样的版本,不作任何改动),就会生成一个新的版本。版本编号即为当前操作的编号(从1开始编号,版本0表示初始状态数组)我们发现修改箭头所指的值时,只有黄线标记的节点受到了影响,这些点的数量为。如题,你需要维护这样的一个长度为 N 的数组,支持如下几种操作。,只需每次对这些节点进行复制,其他未修改的点保留指向即可。个整数,依次为初始状态下数组各位的值(依次为。​​的值,注意:生成一样版本的对象应为。, 分别表示数组的长度和操作的个数。

weixin_44208684的博客 788

cJSON库用完后内存泄漏?手把手教你正确使用cJSON_Delete和free释放资源

本文深入解析cJSON库的内存管理机制,重点解决使用后的内存泄漏问题。通过详细讲解cJSON_Delete和free的正确使用方法,帮助开发者在处理JSON数据时有效释放资源,避免内存泄漏。特别适用于嵌入式系统和资源受限环境,提升开发效率和系统稳定性。

weixin_30808693的博客 418

P3919 【模板】可持久化线段树 1(可持久化数组)

对于操作1,格式为vi​ 1 loci​ valuei​,即为在版本vi​的基础上,将 loci​​ 修改为 valuei​。答:线段树是以区间进行搜索递归,只有当左区间等于右区间是,l==r是才可以被赋值,其他时候一般求个数和区间和或区间的最大值。第二行包含N个整数,依次为初始状态下数组各位的值(依次为 ai​,1≤i≤N)。并对他进行访问它的左右儿子的节点,将上一版本的左右儿子暂存在当前父节点上。输入的第一行包含两个正整数 N,M, 分别表示数组的长度和操作的个数。访问某个历史版本上的某一位置的值。

zhi6fui的博客 1190

Gephi新手必看:如何用Excel整理CSV数据快速生成网络图(附模板)

本文为Gephi新手提供了一份从Excel数据整理到生成专业网络图的完整指南。详细讲解了如何构建规范的节点表和边表CSV文件,并导入Gephi进行可视化分析。通过实战案例,帮助读者快速掌握利用Excel整理数据、规避常见错误,并运用布局算法与视觉编码,将复杂关系数据转化为直观的网络洞察。

weixin_28487433的博客 389

浮点数运算的陷阱与启示:FP16加法器/乘法器开发中的常见误区

本文深入探讨FP16加法器和乘法器开发中的常见误区,包括FP16格式解析、阶码对齐陷阱、尾数运算风险及规格化处理。通过Verilog实战代码展示防御性编程技巧,帮助开发者避免边界条件处理和异常状态管理中的错误,提升硬件设计的可靠性和效率。

dell8的博客 249

可持久化线段树(一)

对于主席树,先说说个人理解(待补),相当于空间换取时间,只有数据范围不是那么大的时候才能使用 一般开的空间为 N *4 + N *log N;具体实现的操作就是先copy一个原版本,之后再进行修改操作,再使用递归pushup上去,就完成了新版本的建立。 下面这道题,就是目前本人学到的主席树的第一个操作----查询定区间第k小的值,下面说说本人的理解。 1.为什么可以使用可持久化线段树? 试想一个问题,如果我们有方法 维护 落在 从小到大 【a,b】值域区间范围内的值的个数(初始化为0),那...

qq_52048593的博客 454

WSL2部署Cadence Virtuoso IC25.1:Ubuntu 26.04排障实录

WSL2以轻量虚拟机结合完整Linux内核,为Windows桌面环境提供了原生级Linux运行能力,解决了传统虚拟机资源开销大、双系统切换低效的问题。对于依赖X11图形协议、FlexNet许可服务和特定动态库的EDA工具链而言,利用WSL2部署Linux发行版需要关注系统集成、显示通路与许可连通性。从技术原理看,图形层X Server的配置、动态库依赖的补齐以及license服务的主机名解析,共同构成EDA工具在WSL2中稳定运行的关键环节。在芯片设计场景中,设计工程师常需在Windows办公机与Linux

weixin_29597551的博客 209

可持久化线段树1

可持久化线段树 1 题目描述 洛谷P3919 可持久化线段树 1(可持久化数组) 核心思路 可持久化数组是一种可以支持回退,访问之前版本的数组, 是一些其他可持久化数据结构的基石(例如可持久化并查集)。 这个题目我们可以使用到主席树,可以先看这道题可持久化线段树2,它是使用主席树来维护权值线段树。 但是对于这道题,我们就不用主席树维护权值线段树了,只要维护一个普通线段树就好了。 算法设计: 用原数组建立一个普通线段树 每次要对数组的某一版本的某一位置进行修改,就相当于以主席树的相应版本的相应位置为模板

qq_45832461的博客 390

基于PSO-BP神经网络的风电功率预测研究论文复现

风电功率预测。基于PSO-BP神经网络的风电功率预测论文复现。matlab程序,注释清晰。

weixin_825487230的博客 2295

【漏洞复现】用友NC-Cloud-反序列化-ResourceManagerServlet

NC Cloud是用友公司推出的大型企业数字化平台。支持公有云、混合云、专属云的灵活部署模式。NC Cloud完全基于云原生架构,技术先进、性能稳定、自主安全可控,支撑大中型以及超大型集团企业N层多site混合云部署方案,支持整个系统高可用、弹性扩展、双/多活,以及快速灾备恢复能力等。用友-NC-Cloud ResourceManagerServlet 接口存在反序列化漏洞,使得攻击者可以通过构造特定的请求远程执行恶意代码。此漏洞可能导致攻击者获取系统权限、执行任意命令,严重威胁系统的机密性和完整性。

漏洞复现 1365

【主席树】P3919 【模板】可持久化线段树 1(可持久化数组)

基本模板,就是每次修改再建立一个根节点,然后将要修改的部分建立新节点;之后每次询问就从提问的那个root去进行线段树上的查找即可 代码 #include<bits/stdc++.h> using namespace std; const int maxn=4e7+5; const int maxm=1e6+5; int n,m,cnt,root[maxn],a[maxm]; struct tree { int l,r,val; }tr[maxn]; int build(int no.

andyc_03的博客 248

倍福PLC--PERSISTENT断电保持数据和BOOT中各文件对应的解析

将D:\TC3程序\TwinCAT Project146\TwinCAT RT(x86)\Plc 文件夹的中三个替换文件复制到:G:\TwinCAT\3.1\Boot\Plc完成替换,如下图。(2) 找到程序所存的路径,编程电脑的D:\TC3程序\TwinCAT Project146路径下,并选择对应系统平台TwinCAT RT(x86)(3) 控制器断电,拔出内存卡,使用读卡器,在编程电脑中打开:(本次测试读卡器为G盘)(5) 开机完成后,TwinCAT自动运行,当前闪灯频率为50ms。

weixin_41883890的博客 2340

可持久化线段树 1(可持久化数组)【模板】【主席树】

主席树

//(^ o ^)// 532

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

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

洛谷 P3919 【模板】可持久化线段树 1(可持久化数组)

维护长度为 N 的数组,可支持如下操作: 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生成一个完全一样的版本,不作任何改动),就会生成一个新的版本,版本编号即为当前操作的编号(版本0表示初始状态数组) 可持久化线段树(主席树) #include<cstdio> #include<iostream> #define MAXN 1000010 using namespace std; int n,m,a[MAXN]

wineandchord 141

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【洛谷】P3919 【模板】可持久化线段树1(可持久化数组)

即为生成一个完全一样的版本,不作任何改动),就会生成一个新的版本。版本编号即为当前操作的编号(从。有了可持久化数组,便可以实现很多衍生的可持久化功能(例如可持久化并查集)可以用主席树,即可持久化线段树,来维护这个数组,参考。个整数,依次为初始状态下数组各位的值(依次为。1.在某个历史版本上修改某一个位置上的值。询问生成的版本是指你访问的那个版本的复制。2.访问某个历史版本上的某一位置的值。,分别表示数组的长度和操作的个数。如题,你需要维护这样的一个长度为。的值,生成一样版本的对象应为。...........

数学、算法爱好者的博客 370

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【ybt金牌导航4-6-3】【luogu P3919】【模板】可持久化线段树 1(可持久化数组)

有个数组,你要支持几种操作。 在某个历史版本的基础上修改某个位置的值。 在某个历史版本上询问某个位置的值。

欢迎您的光顾awa 176

主席树模板二:【洛谷 P3919】可持久化线段树 1(可持久化数组)

【洛谷 P3919】可持久化线段树 1(可持久化数组) 题目大意: 让你维护一个数组,维护两个操作: 1.在数组的某个历史版本上修改一个数,修改后生成一个新的版本。 2 查询数组某个历史版本上的某个位置上数的值,将该版本拷贝一份作为新的版本。 思路: 主席树的模板。 关于主席树 建主席树,询问,修改。 每次在树中找到该历史版本,直接修改。 询问时将该历史版本复制即可。 代码: #include<iostream> #include<cstdio> #include<algori

天空之心 149

线段树算法总结&专题训练4(可持久化线段树)

回顾 在 线段树算法总结&专题训练3 中我们见识了 GSS1-5 的题目如何用线段树解决,那么现在就让我们看一看由线段树引申的算法——主席树(可持久化线段树)。 那么闲话不多说,开始吧! 1.概述 1.可持久化是个啥? 首先让我们看看『可持久化』是什么意思。 在之前我们做到的线段树的所有题目中,我们都是针对当前的线段树直接修改/查询,但是有这样一类题目:它要求在第 kkk 次操作后进行修改,查询,这种问题就是『可持久化』。 接下来先说明一些名词及解释: 『历史版本/版本』:指在某一次修改/查询之后

Plozia 的小窝 383

P3919 【模板】可持久化线段树 1(可持久化数组)及主席树模板1(需要建树)(初始状态为第0版本)

题目链接:【模板】可持久化线段树 1(可持久化数组) - 洛谷 题目描述: 输入描述: 输出描述: 样例: 说明: 这就是主席树的模板题 #include<bits/stdc++.h> using namespace std; #define ll long long #define endl "\n" #define N 1000005 struct node{ int ltree, rtree; //左右儿子的编号 int val; }tre...

m0_55682843的博客 207

洛谷 P3919 【模板】可持久化线段树 1(可持久化数组)【主席树】

题目链接 题意: 给出一个数组,有两种操作,每次操作完会产生一个新版本的数组 将版本 ververver 的第 PPP 个数改为 valvalval 查询版本 ververver 的第 PPP 个数 其中对于操作2,会产生一个和老版本一样的版本 题解: 。。。纯模板题 #include<iostream> #include<sstream> #include<string> #include<queue> #include<map> #incl

qq_50554695的博客 278

洛谷 P3919 【模板】可持久化线段树 1(可持久化数组)java语言

非结构体实现持久化线段树(Java语言)

weixin_64192249的博客 448

可持久化字典树 详解

**字典树**是一种利用边权映射到字符集,将字符串保存到一棵树上的数据结构,在查询公共前缀、字符串排序、词频统计方面有着十分优秀的性质。 **可持久化字典树在可持久化方式上与可持久化字典树十分相似**,即每次只修改被添加或值被修改的节点,而保留没有被改动的节点,在上一个版本的基础上连边,使最后每个版本的 Trie 树的根遍历所能分离出的 Trie 树都是完整且包含全部信息的。 在字典树的拓展部分学习过程中,我们提到了一种特殊的字典树:**0-1 Trie**,而在可持久化字典树中,大部分题目都是以0-1

HeartFireY的博客 1968
上一篇: 【模板】三分法(板子)
下一篇: 【模板】可持久化线段树 2(主席树)
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值