用可持久化线段树维护可持久化数组。可持久化线段树见之前发的主席树模板

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m;
const int N=22000001;
int rt[N],l[N],r[N],t[N],cnt;
int build(int L,int R) {
int root=++cnt;
if(L==R) {
scanf("%d",&t[root]);
return root;
}
l[root]=build(L,L+R>>1);
r[root]=build(1+(L+R>>1),R);
return root;
}
int update(int pre,int L,int R,int c,int x) {
int root=++cnt;
if(L==R) {
t[root]=c;
return root;
}
l[root]=l[pre];
r[root]=r[pre];
int mid=L+R>>1;
if(x<=mid) l[root]=update(l[pre],L,mid,c,x);
else r[root]=update(r[pre],mid+1,R,c,x);
return root;
}
int query(int pre,int L,int R,int c) {
if(L==R) {
return t[pre];
}
int mid=L+R>>1;
if(c<=mid) return query(l[pre],L,mid,c);
else return query(r[pre],mid+1,R,c);
}
int main() {
scanf("%d%d",&n,&m);
build(1,n);
rt[0]=1;
int opt,a,b,c;
for(int i=1; i<=m; i++) {
scanf("%d%d",&a,&opt);
if(opt==1) {
scanf("%d%d",&b,&c);
rt[i]=update(rt[a],1,n,c,b);
} else {
scanf("%d",&b);
rt[i]=rt[a];
printf("%d\n",query(rt[a],1,n,b));
}
}
}

[LUOGU]3919 【模板】可持久化数组的更多相关文章

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

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

  2. 【Luogu P3834】可持久化数组(可持久化线段树)

    题目链接 可持久化线段树模板题. 这里总结一下可持久化线段树. 可持久化数据结构就是能恢复历史状态的数据结构,比如可持久化\(Trie\),并查集,平衡树. 可持久化数组是最基础的,这里通过可持久化线 ...

  3. 【Luogu P3919】可持久化数组

    数组是一种单点修改,单点查询的基础数据结构. 如果要对数组改进,使之可持久化,那么显然我们需要利用其它的数据结构来改进它. 对于单点修改和单点查询两种操作,很容易发现可持久化线段树也是支持这种操作的. ...

  4. P3919 (模板)可持久化数组 (主席树)

    题目链接 Solution 主席树水题,连差分的部分都不需要用到. 直接用主席树的结构去存一下就好了. Code #include<bits/stdc++.h> #define mid ( ...

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

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

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

    题面:[模板]可持久化数组(可持久化线段树/平衡树) 不知道说啥,总之我挺喜欢自己打的板子的! #include<cstdio> #include<cstring> #incl ...

  7. 洛谷P3919 【模板】可持久化数组 [主席树]

    题目传送门 可持久化数组 题目描述 如题,你需要维护这样的一个长度为 $N$ 的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对 ...

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

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

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

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

随机推荐

  1. 分治FFT/NTT 模板

    题目要我们求$f[i]=\sum\limits_{j=1}^{i}f[i-j]g[j]\;mod\;998244353$ 直接上$NTT$肯定是不行的,我们不能利用尚未求得的项卷积 所以要用$CDQ$ ...

  2. 树状数组||归并排序求逆序对+离散化 nlogn

    我好咸鱼. 归并排序之前写过,树状数组就是维护从后往前插入,找比现在插入的数大的数的数量. 如果值域大,可以离散化 #include <cstdio> #include <cstri ...

  3. 3、用js文件写mongo命令+update命令

    一.用js写一个模拟用户登录日志表的信息 var userName = "chengxiang"; //声明一个登录名 var timeStamp = Date.parse(new ...

  4. BA-siemens-ppm模块调试

    第一部分:现场接线 1. 拨码:朝向数字那一端为0,远离数字那一端为1,PPM的地址设定方法就是将拨码器拨为跟系统架构表一样的数字,比如一个1U32的编号为77020,那么它的编号就是20,将4和16 ...

  5. codevs——T2102 石子归并 2

     http://codevs.cn/problem/2102/  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Des ...

  6. JavaScript中==和===区别

    在我们的日常编码中对于===是不常用的,但是它很重要 ===:表示绝对相等(严格) !==:表示不绝对相等 ==:表示相等(不严格) !=:表示不相等 看一下列子: null==undefined   ...

  7. cocos2d-x 3.2 之 2048 —— 第五篇

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  8. php生产随机数

    php生产随机数 要求 生产三种随机数 1.全数字 2.全字母,大小写 3.数字和大小写字母 代码 <?php class RandString{ //这个属性表示我们随机数的长度,也就是个数 ...

  9. 院校-德国:亚琛工业大学(RWTH)

    ylbtech-院校-德国:亚琛工业大学(RWTH) 1.返回顶部 1. 亚琛工业大学(RWTH)成立于1870年,是德国著名理工类大学之一,也是世界顶尖理工类大学之一 ,长久以来被誉为“欧洲的麻省理 ...

  10. 23.QFile遍历

    #include "mainwindow.h" #include <QApplication> #include <QDebug> #include < ...