题面:【模板】可持久化数组(可持久化线段树/平衡树)

不知道说啥,总之我挺喜欢自己打的板子的!

 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
inline int rd(){
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return f*x;
}
const int maxn=(1e6)+,maxm=maxn;
int N,M,num_treenode=,root[maxm],belong_root[maxm],num_root=,u,num_version=,A[maxn],V,loc,o,val;
struct Tree{
int ls,rs,l,r,data;
}t[(maxn<<)+*maxm];
inline void Build(int x,int l,int r){
t[x].l=l;t[x].r=r;
if(l==r){
t[x].data=A[l];
return;
}
int mid=(l+r)>>;
t[x].ls=++num_treenode;Build(num_treenode,l,mid);
t[x].rs=++num_treenode;Build(num_treenode,mid+,r);
return;
}
inline void Update(int x,int u,int loc,int v){
int l=t[u].l,r=t[u].r,mid=(l+r)>>;
t[x].l=l;t[x].r=r;
if(l==r&&l==loc){
t[x].data=v;
return;
}
if(loc<=mid){
t[x].rs=t[u].rs;
t[x].ls=++num_treenode;
Update(num_treenode,t[u].ls,loc,v);
}
else{
t[x].ls=t[u].ls;
t[x].rs=++num_treenode;
Update(num_treenode,t[u].rs,loc,v);
}
return;
}
inline int Query(int x,int loc){
int l=t[x].l,r=t[x].r,mid=(l+r)>>;
if(l==r&&l==loc) return t[x].data;
if(loc<=mid)return Query(t[x].ls,loc);
else return Query(t[x].rs,loc);
}
int main(){
N=rd();M=rd();
for(int i=;i<=N;i++)A[i]=rd();
root[++num_root]=++num_treenode;//root[i]数组记录树i的根节点是哪个
belong_root[]=num_root;//belong_root[i]记录版本i的树根是哪个
Build(num_treenode,,N);
while(M--){
V=rd();o=rd();loc=rd();
u=belong_root[V];//u记录第V个版本到底属于哪颗树
if(o==){
val=rd();
root[++num_root]=++num_treenode;//多了一颗树
Update(num_treenode,root[u],loc,val);
belong_root[++num_version]=num_root;
}
else{
printf("%d\n",Query(root[u],loc));
belong_root[++num_version]=u;
}
}
return ;
}

By:AlenaNuna

Luogu P3919【模板】可持久化数组(可持久化线段树/平衡树)的更多相关文章

  1. luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)

    luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目 #include<iostream> #include<cstdlib> #include< ...

  2. 洛谷 P3919 【模板】可持久化数组(可持久化线段树/平衡树)-可持久化线段树(单点更新,单点查询)

    P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集 ...

  3. 洛谷——P3919 【模板】可持久化数组(可持久化线段树/平衡树)

    P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集 ...

  4. Luogu P3919 【模板】可持久化数组 可持久化线段树

    其实就是可持久化线段树的模板题线段树不会看这里 #include<bits/stdc++.h> ; using namespace std; ]; ],rc[N*],val[N*],cnt ...

  5. P3919 【模板】可持久化数组 -初步探究主席树

    本篇blog主要是给自己(大家)看的. 感谢longlongzhu123奆佬(此人初二LCT)的指点,使本蒟蒻可以快速开始主席树入门. what is 主席树? $        $主席树这个名字只不 ...

  6. [Luogu 3919]【模板】可持久化数组(可持久化线段树/平衡树)

    Description 如题,你需要维护这样的一个长度为 N 的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生 ...

  7. 洛谷P3919 【模板】可持久化数组(可持久化线段树/平衡树)

    题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集) 题目描述 如题,你需要维护这样的一个长度为 N 的数组, ...

  8. P3919 【模板】可持久化数组(可持久化线段树/平衡树)

    题目描述 如题,你需要维护这样的一个长度为 N  的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生成一个完全一 ...

  9. LGOJ P3919【模板】可持久化数组(可持久化线段树/平衡树)

    代码 //可持久化线段树 #include <cstdio> using namespace std; struct node { node *Lnode,*Rnode; int val; ...

随机推荐

  1. PL/SQL学习笔记之循环语句

    一:基本循环 LOOP 循环体: 退出循环: )IF condition THEN exit; END IF; ) exit WHEN condition; END LOOP; 二:WHILE循环 W ...

  2. 使用js获取QueryString的方法小结

    一.<script> urlinfo=window.location.href; //获取当前页面的url len=urlinfo.length;//获取url的长度 offset=url ...

  3. Javascript 原生Cookie使用用法

    var oCookie = { setCookie: function (name, value, expireDays, path, domain) { var expireDays = expir ...

  4. android开发的童鞋们 你该学点C++

    更多关于C++的知识点,请关注android开发应该学点C++(索引贴)android开发应该学点C++(其他) (*android开发论坛----android开发学习----android开发*) ...

  5. 解决CentOS缺少共享库

    # ./aapt dump bading ./tmp/app_xxxx.apk ./appt:error while loading shared libraries: libraries: libs ...

  6. tensorflow 笔记11:tf.nn.dropout() 的使用

    tf.nn.dropout:函数官网说明: tf.nn.dropout( x, keep_prob, noise_shape=None, seed=None, name=None ) Defined ...

  7. 【XMPP】Smack源码之消息接收与解析

    XmpPullParser 鉴于xmpp协议都是以xml格式来传输,因此源码中解析协议都是用到XmpPullParser来解析xml XmpPullParser很简单,先简单介绍几个比较常用的方法 / ...

  8. Android开发(十二)——头部、中部、底部布局

    参考: [1] http://www.thinksaas.cn/group/topic/82898/ [2] http://***/Article/12399 其实RadioGroup不好使,不能图片 ...

  9. java中job运行时间

    long startTime=System.currentTimeMillis();//记录开始时间 method();//此处为你调用的方法 long endTime=System.currentT ...

  10. 开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ

    开源C/C++网络库:ACE          C++语言 跨平台Boost的ASIO  C++语言 跨平台libevent     C语言   主要支持linux,新版增加了对windows的IOC ...