【模板】可持久化数组(可持久化线段树/平衡树)
来源:互联网 发布:python 二叉树 编辑:程序博客网 时间:2024/06/01 07:39
题目描述 题目
模板模板
线段与它的历史版本
新的版本只要在历史版本上修改一条路就好了
继续打指针 指针真的好用
代码(可持久化线段树)
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;const int N=1000010;int n,m,a[N],cnt;struct node{node* ch[2];int v;};node* T[N];void build(node* &o,int l,int r){ if(l > r) return ; o=new node(); if(l == r) {o->v=a[l];return ;} int mid=(l+r)>>1; build(o->ch[0],l,mid); build(o->ch[1],mid+1,r);}void updata(node* pre,node* &o,int l,int r,int x,int v){ if(l > r) return ; o=new node();o->ch[0]=pre->ch[0];o->ch[1]=pre->ch[1]; if(l == r) {o->v=v;return ;} int mid=(l+r)>>1; if(x <= mid) updata(pre->ch[0],o->ch[0],l,mid,x,v); else updata(pre->ch[1],o->ch[1],mid+1,r,x,v);}int query(node* o,int l,int r,int x){ if(l > r) return 0; if(l == r) return o->v; int mid=(l+r)>>1; if(x <= mid) return query(o->ch[0],l,mid,x); return query(o->ch[1],mid+1,r,x);}int read(){ int out=0,f=1;char c=getchar();while(c > '9' || c < '0') {if(c == '-') f=-1;c=getchar();} while(c <= '9' && c >= '0') {out=(out<<1)+(out<<3)+c-'0';c=getchar();}return out*f;}void solve(){ n=read(),m=read(); for(int i=1;i<=n;i++) a[i]=read(); build(T[0],1,n); for(int i=1;i<=m;i++) { int x=read(),opt=read(),loc=read(); if(opt == 1) { int y=read(); updata(T[x],T[++cnt],1,n,loc,y); } if(opt == 2) {T[++cnt]=T[x];printf("%d\n",query(T[x],1,n,loc));} }}int main(){ solve(); return 0;}
阅读全文
0 0
- 【模板】可持久化数组(可持久化线段树/平衡树)
- 【模板】可持久化线段树
- 【CJOJ2316】【模板】可持久化线段树
- 可持久化线段树模板
- BZOJ3932 CQOI2015 任务查询系统-可持久化线段树-可持久化平衡树
- 可持久化线段树
- 可持久化线段树
- 可持久化线段树
- 可持久化线段树
- 可持久化线段树
- 可持久化线段树
- 可持久化线段树
- 【模板】可持久化线段树 1(主席树)
- 【模板】可持久化线段树(主席树)
- 可持久化线段树(主席树)【数组】
- [BZOJ3674]可持久化并查集 可持久化线段树维护数组
- 可持久化线段树 模板 【bzoj3932】任务查询系统
- hdu 4348 可持久化线段树
- linux 获取目录下最新文档
- eclipse 移除Android插件
- boj1490 找零钱 dp
- 模型绑定及动画
- 【Linux内核驱动】模块编译技巧
- 【模板】可持久化数组(可持久化线段树/平衡树)
- MAT(Memory Analyzer Tools)使用指南
- 14-2
- TiDB
- freemaker导出word含图片格式
- 方法executeQuery
- JSON与XML的区别比较
- Leetcode 299[media]---- Bulls and Cows
- git 创建分支提交远程分支