C10 可持久化数组
Luogu P3919【模板】可持久化线段树 1(可持久化数组)
#include <iostream> using namespace std; #define N 1000005 #define lc(x) tr[x].l #define rc(x) tr[x].r int n,m,a[N]; struct node{ int l,r; int v; }tr[N*25]; int root[N],idx; void build(int &x,int l,int r){ x=++idx; if(l==r){ tr[x].v=a[l]; return; } int m = l+r>>1; build(lc(x),l,m); build(rc(x),m+1,r); } void modify(int &x,int y,int l,int r,int pos,int v){ x=++idx; tr[x]=tr[y]; if(l==r){ tr[x].v=v; return; } int mid = l+r>>1; if(pos<=mid) modify(lc(x),lc(y),l,mid,pos,v); else modify(rc(x),rc(y),mid+1,r,pos,v); } int query(int x,int l,int r,int pos){ if(l==r) return tr[x].v; int mid = l+r>>1; if(pos<=mid) return query(lc(x),l,mid,pos); else return query(rc(x),mid+1,r,pos); } int main(){ int ver,op,x,y; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",a+i); build(root[0],1,n); for(int i=1;i<=m;i++){ scanf("%d%d",&ver,&op); if(op==1){ scanf("%d%d",&x,&y); modify(root[i],root[ver],1,n,x,y); } else{ scanf("%d",&x); printf("%d\n",query(root[ver],1,n,x)); root[i]=root[ver]; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!