数组是一种单点修改,单点查询的基础数据结构。

如果要对数组改进,使之可持久化,那么显然我们需要利用其它的数据结构来改进它。

对于单点修改和单点查询两种操作,很容易发现可持久化线段树也是支持这种操作的。

所以,我们利用可持久化线段树来维护一个可持久化数组

#include<cstdio>
#define mid ((l+r)>>1)
using namespace std;
const int maxn=1e6+5;
int tot,tree[maxn*20],ls[maxn*20],a[maxn],rs[maxn*20],rt[maxn],n,m,v,flag,loc,val;
int build(int l,int r)
{
int now=++tot;
if (l==r)
{
tree[now]=a[l];
return now;
}
ls[now]=build(l,mid);
rs[now]=build(mid+1,r);
return now;
}
int update(int root,int l,int r,int pnt,int val)
{
int now=++tot;
ls[now]=ls[root];
rs[now]=rs[root];
if (l==r&&l==pnt)
{
tree[now]=val;
return now;
}
else
{
if (l==r) return now;
if (pnt<=mid) ls[now]=update(ls[now],l,mid,pnt,val);
if (pnt>mid) rs[now]=update(rs[now],mid+1,r,pnt,val);
return now;
}
}
int query(int root,int l,int r,int pnt)
{
if (l==r&&l==pnt)
return tree[root];
int ret;
if (pnt<=mid) ret=query(ls[root],l,mid,pnt);
if (pnt>mid) ret=query(rs[root],mid+1,r,pnt);
return ret;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
rt[0]=build(1,n);
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&v,&flag,&loc);
if (flag==1)
{
scanf("%d",&val);
rt[i]=update(rt[v],1,n,loc,val);
}
else
{
rt[i]=rt[v];
printf("%d\n",query(rt[v],1,n,loc));
}
}
return 0;
}

【Luogu P3919】可持久化数组的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. C二维字符数组的使用及如何获取二维数组的总行数和总列数!

    #include <stdio.h> #include <stdlib.h> int main(){ char str[][30] = {"zhangsan" ...

  2. phpstrom php出现404

    phpstrom搭配xampp用着很舒服,但是配置不小心容易出现404错误,解决并不难,几步就完成了 !第一步:依次选择Tools-Deployment-configuration进入后如果为空,点击 ...

  3. WAMP本地环境升级php版本操作步骤(详细)

    php版本下载地址:http://windows.php.net/download/ 步骤:下载php版本-解压文件-放到bin/php目录下-更改文件 图片教程: 更改文件内容: 1.从已存在的ph ...

  4. 深入理解JVM虚拟机13:再谈四种引用及GC实践

    Java中的四种引用类型 一.背景 Java的内存回收不需要程序员负责,JVM会在必要时启动Java GC完成垃圾回收.Java以便我们控制对象的生存周期,提供给了我们四种引用方式,引用强度从强到弱分 ...

  5. web前端兼容性问题

    传送门:https://www.cnblogs.com/zhoudawei/p/7497544.html

  6. qt access 数据库

    #include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include ...

  7. PHP异步非阻塞fsockopen(本地可以非阻塞请求,服务器就一直执行异步的不成功) (未解决)

    index.php /** * php异步请求 * * @param $host string 主机地址 * @param $path string 路径 * @param $param array ...

  8. itop 环境

    iTop,即IT运营门户(IT Operation Portal),是一个开源web应用程序,用于IT环境的日常运营.它基于ITIL最佳实践,而又不拘泥于任何具体流程.它很灵活,可以适应不管是非正 式 ...

  9. http://stblog.baidu-tech.com/?p=1684) coredump调试记录 - PHP篇 原创: 扶墙 贝壳产品技术 今天

    http://stblog.baidu-tech.com/?p=1684) coredump调试记录 - PHP篇 原创: 扶墙 贝壳产品技术 今天

  10. PHP技术知识点整理

    1.解释mvc (1)mvc即 模型model,视图view,控制器controller:是一种模型,是一种编程思想,就是把一个应用的输入.输出.数据处理分开,分解耦合(2)A..视图,数据采集和处理 ...