LGOJ P3919【模板】可持久化数组(可持久化线段树/平衡树)
代码
//可持久化线段树
#include <cstdio>
using namespace std;
struct node
{
node *Lnode,*Rnode;
int val;
void clone(node* N)
{
Lnode=N->Lnode;
Rnode=N->Rnode;
val=N->val;
return;
}
}tree[20000005],*root[1000005],*tail=tree;
int a[1000005];
node* build(int L,int R)
{
node *N=(++tail);
if(L==R)
{
N->val=a[L];
return N;
}
int M=(L+R)>>1;
N->Lnode=build(L,M);
N->Rnode=build(M+1,R);
return N;
}
node* modify(node* N,int L,int R,int pos,int val)
{
node *O=(++tail);
O->clone(N);
if(L==R)
{
O->val=val;
return O;
}
int M=(L+R)>>1;
if(pos<=M) O->Lnode=modify(N->Lnode,L,M,pos,val);
else O->Rnode=modify(N->Rnode,M+1,R,pos,val);
return O;
}
int query(node* N,int L,int R,int pos)
{
if(L==R) return N->val;
int M=(L+R)>>1;
if(pos<=M) return query(N->Lnode,L,M,pos);
return query(N->Rnode,M+1,R,pos);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
root[0]=build(1,n);
for(int i=1;i<=m;i++)
{
int v,opt,loc;
scanf("%d%d%d",&v,&opt,&loc);
if(opt==1)
{
int val;
scanf("%d",&val);
root[i]=modify(root[v],1,n,loc,val);
}
else
{
printf("%d\n",query(root[v],1,n,loc));
root[i]=root[v];
}
}
return 0;
}
LGOJ P3919【模板】可持久化数组(可持久化线段树/平衡树)的更多相关文章
- 洛谷 P3919 【模板】可持久化数组(可持久化线段树/平衡树)-可持久化线段树(单点更新,单点查询)
P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集 ...
- 洛谷——P3919 【模板】可持久化数组(可持久化线段树/平衡树)
P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集 ...
- luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)
luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目 #include<iostream> #include<cstdlib> #include< ...
- Luogu P3919【模板】可持久化数组(可持久化线段树/平衡树)
题面:[模板]可持久化数组(可持久化线段树/平衡树) 不知道说啥,总之我挺喜欢自己打的板子的! #include<cstdio> #include<cstring> #incl ...
- P3919 【模板】可持久化数组 -初步探究主席树
本篇blog主要是给自己(大家)看的. 感谢longlongzhu123奆佬(此人初二LCT)的指点,使本蒟蒻可以快速开始主席树入门. what is 主席树? $ $主席树这个名字只不 ...
- Luogu P3919 【模板】可持久化数组 可持久化线段树
其实就是可持久化线段树的模板题线段树不会看这里 #include<bits/stdc++.h> ; using namespace std; ]; ],rc[N*],val[N*],cnt ...
- 洛谷P3919 【模板】可持久化数组(可持久化线段树/平衡树)
题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集) 题目描述 如题,你需要维护这样的一个长度为 N 的数组, ...
- P3919 【模板】可持久化数组(可持久化线段树/平衡树)
题目描述 如题,你需要维护这样的一个长度为 N 的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生成一个完全一 ...
- [Luogu 3919]【模板】可持久化数组(可持久化线段树/平衡树)
Description 如题,你需要维护这样的一个长度为 N 的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生 ...
随机推荐
- C++/C代码审查注意事项(摘录,非原创)
文件结构 头文件和定义文件的名称是否合理?头文件和定义文件的目录结构是否合理?版权和版本声明是否完整? 重要头文件是否使用了 ifndef/define/endif 预处理块?头文件中是否只存放“声明 ...
- echo 与 printf的区别与联系
echo命令默认是带有换行符的. 如果想让echo命令去掉每一行后面的换行符 方法1; 如果确信自己的脚本程序只运行在bash上,可以使用如下语法来出去空格: echo -n "Is it ...
- Typescript基础
参数类型新特性: 类型声明 变量/函数:类型(string.any.number.boolean.void五种基本类型) 例如:var age:number=19; function test(na ...
- jmeter断言接口响应字段大小
一,有时候断言需要判断接口返回某个字段值是否大于或者小于预期值,此时断言需要用到BeanShell断言 写法如下: import com.alibaba.fastjson.JSONObject; // ...
- 10、jeecg 默认为空的字段值是如何被填充的?
1.前言 用过 jeecg 的小伙伴,在 jeecg 实体中常见下面几个字段: /**创建人名称*/ private java.lang.String createName; /**创建人登录名称*/ ...
- coreseek/sphinx中的匹配模式
所谓匹配模式就是用户怎样依据keyword在索引库中查找相关的记录. SPH_MATCH_ALL, 匹配全部查询分词(默认模式); 如"手机配件".不匹配 "我有一部手机 ...
- MongoDB3.2新特性之文档验证
官方参考: https://docs.mongodb.org/master/core/document-validation/ 文档验证是3.2的重要新特性,添加验证条件的情形无非两种,一是在创建集合 ...
- Cocos Creator 按钮音效封装重写
cc.Button.prototype._onTouchEnded = function (t) { cc.hb.audioMgr.playMusic("click", false ...
- MATLAB GUI设计(线性卷积和循环卷积的比较--笔记)
原创循环卷积代码,转载需注明出处 线性卷积与循环卷积的比较 实验目的和要求 掌握循环卷积和线性卷积的原理,与理论分析结果比较,加深理解循环卷积与线性卷积之间的关系. 实验内容和步骤 1) 已知两序列X ...
- jquery判断字符长度 数字英文算1字符 汉字算2字符
<input type="text" maxlength="25" oninput="textlength(this)"> &l ...