当前位置: 首页 > news >正文

[数据结构]可持久化数组

题目链接

如题,你需要维护这样的一个长度为 N 的数组,支持如下两种操作:

  1. 在某个历史版本上修改某一个位置上的值。
  2. 访问某个历史版本上的某一位置的值。

此外,每进行一次操作,就会生成一个新的版本。版本编号即为当前操作的编号(从 1 开始编号,版本 0 表示初始状态数组)。
对于操作 2,即为生成一个完全一样的版本,不作任何改动。即,询问生成的版本是询问所访问的那个版本的复制。

对于 100% 的数据:

  • 1 <= N, M <= 10^6;
  • 1 <= p <= N;
  • 设当前是第 x 次操作,0 <= v < x;
  • -10^9 <= a_i,c <= 10^9。

本题是正常线段树+可持久化

const int N = 1e6+2;
int n,m,a[N];
struct node{int l,r,val;
}hjt[N*40];
int cnt,root[N];
void build(int l,int r,int &now){now=++cnt;if(l==r){hjt[now].val=a[l];return;}int m=(l+r)>>1;build(l,m,hjt[now].l);build(m+1,r,hjt[now].r);
}
//main函数内部
cin>>n>>m;
for(int i=1;i<=n;i++){cin>>a[i];
}
build(1,n,root[0]);

先初始化,开始建树,建树过程与正常线段树区别不大

void modify(int l,int r,int ver,int &now,int &pos,int &num){hjt[now=++cnt]=hjt[ver];if(l==r){hjt[now].val=num;return;}int mid=(l+r)>>1;if(pos<=mid)modify(l,mid,hjt[ver].l,hjt[now].l,pos,num);else modify(mid+1,r,hjt[ver].r,hjt[now].r,pos,num);
}
int query(int l,int r,int now,int &pos){if(l==r){return hjt[now].val;}int mid=(l+r)>>1;if(pos<=mid)return query(l,mid,hjt[now].l,pos);else return query(mid+1,r,hjt[now].r,pos); 
}
//main函数内部
for(int i=1;i<=m;i++){int v,opt,x,y;cin>>v>>opt;switch(opt){case 1:cin>>x>>y;modify(1,n,root[v],root[i],x,y);break;case 2:cin>>x;cout<<query(1,n,root[v],x)<<"\n";root[i]=root[v];break;}
}

modify()与可持久化线段树/主席树的modify()函数类似,先复制前一个版本,后续逐个修改不一样的节点

query()与正常线段树查询类似

main()函数只需要判断opt然后接着调用即可

http://www.jsqmd.com/news/388290/

相关文章:

  • 提示工程架构师团队指南:提示设计研究如何高效协作?3个流程+2个协作工具
  • 模型量化在工业质检AI应用中的优化实践
  • 2026年烤漆龙骨公司权威推荐:四川烤漆龙骨、四川矿棉板、四川轻钢龙骨、抗菌矿棉板、轻钢龙骨吊顶、防潮矿棉板、龙骨吊顶选择指南 - 优质品牌商家
  • AI伦理合规不踩雷!架构师必学的理论落地方法论
  • 2026年隔墙龙骨厂家权威推荐榜:抗菌矿棉板/条形矿棉板/矿棉吸音板/矿棉板吊顶施工/矿棉装饰吸声板/轻钢龙骨吊顶/选择指南 - 优质品牌商家
  • 2026年防火矿棉板厂家推荐:抗菌矿棉板、矿棉吸音板、矿棉板吊顶施工、矿棉装饰吸声板、轻钢龙骨吊顶、防潮矿棉板选择指南 - 优质品牌商家
  • 2026年矿棉板厂家最新推荐:‌U型龙骨、售楼处、四川烤漆龙骨、四川矿棉板、四川轻钢龙骨、抗菌矿棉板、条形矿棉板选择指南 - 优质品牌商家
  • 2026年龙骨厂家最新推荐:四川轻钢龙骨/抗菌矿棉板/矿棉吸音板/矿棉板吊顶施工/矿棉装饰吸声板/轻钢龙骨吊顶/选择指南 - 优质品牌商家
  • 2026年铝方通吊顶公司权威推荐:木纹铝方通/氟碳铝单板/铝单板吊顶/铝方通铝方管/雕花铝单板/冲孔铝单板/双曲铝单板/选择指南 - 优质品牌商家
  • 2026年转印铝方通厂家权威推荐榜:铝方通吊顶、铝方通铝方管、雕花铝单板、U型铝方通、双曲铝单板、喷涂铝单板、幕墙铝单板选择指南 - 优质品牌商家
  • 智能客服机器人服务商深度评测:2026年如何选择你的AI伙伴? - 2026年企业推荐榜
  • SpringBoot+Vue 教学资料管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • SpringBoot+Vue 个性化定制智慧校园管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 2026年评价高的U型铝方通公司推荐:冲孔铝单板、双曲铝单板、喷涂铝单板、四川铝单板、四川铝方通、型材铝方通、幕墙铝单板选择指南 - 优质品牌商家
  • 2026年专业制冷设备维修服务商综合盘点 - 2026年企业推荐榜
  • Java Web BS老年人体检管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 芯片工程师如何缓解上班焦虑?
  • 【2025最新】基于SpringBoot+Vue的房地产销售管理系统管理系统源码+MyBatis+MySQL
  • Python:生成器函数
  • GLM-4-9B-Chat-1M实战教程:结合LlamaIndex构建支持增量更新的本地知识引擎
  • EE校园二手书交易平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 合肥手工地毯寻源记:五家实力工厂深度解析 - 2026年企业推荐榜
  • Kook Zimage Turbo效果展示:惊艳的幻想风格AI绘画作品集
  • Oh-My-OpenCode 3.5.6 完整使用指南
  • VDB:动态稀疏体积数据结构在影视特效中的高效应用
  • 2026年四川铝方通公司权威推荐:异形铝单板/异形铝方通/弧形铝单板/弧形铝方通/木纹铝方通/氟碳铝单板/覆膜铝方通/选择指南 - 优质品牌商家
  • LingBot-Depth 5分钟快速部署指南:零基础玩转单目深度估计
  • 5步掌握文墨共鸣:StructBERT语义分析实战
  • 2026年木纹铝方通厂家推荐:异形铝方通/弧形铝单板/弧形铝方通/氟碳铝单板/覆膜铝方通/转印铝方通/铝单板吊顶/选择指南 - 优质品牌商家
  • AI绘画新选择:Qwen-Image-Lightning极简UI体验报告