可持久化线段树
每次进行单点修改后,会新增 \(log\ n\) 个新节点,即每次更改的结点数为树的高度 增加的非叶子结点一个儿子是其他版本的节点,另一个儿子是连向新节点 空间复杂度为 \(O(n+m\ log\ n)\) \(code\) : void build(int L,int R,int &cur) { cur=++tree_cnt; if(L==R) { val[cur]=a[L]; return; } int mid=(L+R)>>1; build(L,mid,ls[cur]); build(mid+1,R,rs[cur]); } void modify(int L,int R,int pos,int v,int pre,int &cur) { cur=++tree_cnt; ls[cur]=ls[pre],rs[cur]=rs[pre]; val[cur]=val[pre]; if(L==R) { val[cur]=v; return; } int mid=(L+R)>>1; if(pos<=mid) modify(L,mid,pos,v,ls[pre],ls[cur]); if(pos>mid) modify(mid+1,R,pos,v,rs[pre],rs[cur]); } int query(int L,int R,int pos,int cur) { if(L==R)