Luogu P3919 【模板】可持久化线段树 1(可持久化数组)
板子,正好温习一下主席树的写法
记得数组开 \(32\) 倍!!
\(Code\)
#include<cstdio>
using namespace std;
const int N = 1e6 + 5;
int rt[N] , a[N] , n , m , size;
struct Segment{
int ls , rs , s;
}seg[N << 5];
inline int build(int l , int r)
{
int o = ++size;
if (l == r) {seg[o].s = a[l]; return o;}
int mid = (l + r) >> 1;
seg[o].ls = build(l , mid) , seg[o].rs = build(mid + 1 , r);
return o;
}
inline int insert(int u , int x , int val , int l , int r)
{
int o = ++size; seg[o].ls = seg[u].ls , seg[o].rs = seg[u].rs;
if (l == r) {seg[o].s = val; return o;}
int mid = (l + r) >> 1;
if (x <= mid) seg[o].ls = insert(seg[u].ls , x , val , l , mid);
else seg[o].rs = insert(seg[u].rs , x , val , mid + 1 , r);
return o;
}
inline int query(int u , int x , int l , int r)
{
if (l == r) return seg[u].s;
int mid = (l + r) >> 1;
if (x <= mid) return query(seg[u].ls , x , l , mid);
else return query(seg[u].rs , x , mid + 1 , r);
}
int main()
{
scanf("%d%d" , &n , &m);
for(register int i = 1; i <= n; i++) scanf("%d" , a + i);
rt[0] = build(1 , n);
int v , op , loc , val;
for(register int i = 1; i <= m; i++)
{
scanf("%d%d%d" , &v , &op , &loc);
if (op == 2){printf("%d\n" , query(rt[v] , loc , 1 , n)) , rt[i] = rt[v];}
else {scanf("%d" , &val) , rt[i] = insert(rt[v] , loc , val , 1 , n);}
}
}
Luogu P3919 【模板】可持久化线段树 1(可持久化数组)的更多相关文章
- bzoj3673可持久化线段树实现可持久化数组实现可持久化并查集(好长)
线段树只用叶子节点感觉莫名浪费,,, 感觉真好写(刚从未来程序逃回来的人) #include <cstdio> #define mid ((l+r)>>1) ,ca,x,y; ...
- 【Luogu P3834】可持久化数组(可持久化线段树)
题目链接 可持久化线段树模板题. 这里总结一下可持久化线段树. 可持久化数据结构就是能恢复历史状态的数据结构,比如可持久化\(Trie\),并查集,平衡树. 可持久化数组是最基础的,这里通过可持久化线 ...
- 洛谷P3994 Highway(树形DP+斜率优化+可持久化线段树/二分)
有点类似NOI2014购票 首先有方程$f(i)=min\{f(j)+(dep_i-dep_j)*p_i+q_i\}$ 这个显然是可以斜率优化的... $\frac {f(j)-f(k)}{dep_j ...
- luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)
luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目 #include<iostream> #include<cstdlib> #include< ...
- Luogu P3919 【模板】可持久化数组 可持久化线段树
其实就是可持久化线段树的模板题线段树不会看这里 #include<bits/stdc++.h> ; using namespace std; ]; ],rc[N*],val[N*],cnt ...
- Luogu P3919【模板】可持久化数组(可持久化线段树/平衡树)
题面:[模板]可持久化数组(可持久化线段树/平衡树) 不知道说啥,总之我挺喜欢自己打的板子的! #include<cstdio> #include<cstring> #incl ...
- 洛谷 P3919 【模板】可持久化数组(可持久化线段树/平衡树)-可持久化线段树(单点更新,单点查询)
P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集 ...
- 洛谷——P3919 【模板】可持久化数组(可持久化线段树/平衡树)
P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目背景 UPDATE : 最后一个点时间空间已经放大 标题即题意 有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集 ...
- LGOJ P3919【模板】可持久化数组(可持久化线段树/平衡树)
代码 //可持久化线段树 #include <cstdio> using namespace std; struct node { node *Lnode,*Rnode; int val; ...
- 【洛谷P3834】(模板)可持久化线段树 1(主席树)
[模板]可持久化线段树 1(主席树) https://www.luogu.org/problemnew/show/P3834 主席树支持历史查询,空间复杂度为O(nlogn),需要动态开点 本题用一个 ...
随机推荐
- 处理get请求中文乱码tomcat请求
修改tomcat中server配置:添加 URIEncoding="UTF-8" <Connector port="8090" protocol=&quo ...
- 提高python异步效率
uvloop #Python标准库中提供了asyncio模块,用于支持基于协程的异步编程. #uvloop是 asyncio 中的事件循环的替代方案,替换后可以使得asyncio性能提高.事实上,uv ...
- 一键部署MySQL8+keepalived双主热备高可用
概述 本次的文章会格外的长,网上大多的配置流程已经不可使用,本篇文章可以称为保姆级教程,而且通过shell脚本大大减少了部署mysql主从,双主的工作量. 如上图,VIP地址为192.168.10.1 ...
- 02.JavaScript学习笔记1
1.强制类型转换 当使用加号进行运算时,会将数字强制转换为字符串,然后再进行运算. const year = '1991'; console.log(year + 18); console.log(t ...
- 青少年CTF-Web-Robots
题目信息 题目名称:Robots 题目描述:昨天十三年社团讲课,讲了Robots.txt的作用,小刚上课没有认真听课正在着急,你能不能帮帮忙? 题目难度:一颗星 解题过程 访问题目链接 浏览器里是空白 ...
- nacos注册中心单节点ap架构源码解析
一.注册流程 单nacos节点流程图如下: 流程图可以知,Nacos注册流程包括客户端的服务注册.服务实例列表拉取.定时心跳任务:以及服务端的定时检查服务实例任务.服务实例更新推送5个功能. 服务注册 ...
- Less-1(GET字符型)
union联合注入(方法一) 进入靶场 按照要求提交一个id:http://192.168.121.131/sqli/Less-1/?id=1 数据库执行语句:select * from news w ...
- python之路34 MySQL 2 配置文件 字段类型
字符编码与配置文件 1.\s查看MySQL相关信息 当前用户.版本.编码.端口号 MySQL5.6及之前的版本编码需要人为统一 之后的版本已经全部默认统一 如果想要永久修改编码配置 需要操作配置文件 ...
- python基础练习题 经常更新
小练习 1.打印出jason l1 = [11, 22, 'kevin', ['tony', 'jerry', [123, 456, 'jason']]] # print(l1[3][2][2]) l ...
- element上传图片组件使用方法|图片回显|格式转换base64
upload上传组件的使用方法 上传图片后自动上传(也可以手动上传),图片上传成功后由后端返回特定图片地址,在表单提交后将表单数据同图片地址一并返回即可完成图片上传功能. 组件HTML <!-- ...