还是用主席树来做(因为提到不同的版本),这时候的主席树不是以权值为下标的,就是普通的线段树,维护范围1~n,i存的是a[ ]中的数。

 1 #include <bits/stdc++.h>
2 using namespace std;
3 const int N = 1e6 + 10, M = N * 30;
4 struct node {
5 int ls, rs, val;
6 }t[M];
7 int n, m, a[N], rt[N], cnt;
8 void build(int &i, int l, int r) {
9 i = ++ cnt;
10 if (l == r) {t[i].val = a[l]; return ;}
11 int mid = (l + r) >> 1;
12 build(t[i].ls, l, mid), build(t[i].rs, mid + 1, r);
13 }
14 void ins(int &i, int j, int l, int r, int x, int v) {
15 i = ++ cnt;
16 t[i] = t[j];//复制
17 if (l == r) {t[i].val = v; return ;}
18 int mid = (l + r) >> 1;
19 if (x <= mid) ins(t[i].ls, t[j].ls, l, mid, x, v);
20 else ins(t[i].rs, t[j].rs, mid + 1, r, x, v);
21 }
22 int query(int i, int l, int r, int x) {
23 if (l == r) return t[i].val;
24 int mid = (l + r) >> 1;
25 if (x <= mid) return query(t[i].ls, l, mid, x);
26 else return query(t[i].rs, mid + 1, r, x);
27 }
28 int main() {
29 scanf("%d %d", &n, &m);
30 for (int i = 1; i <= n; i ++) scanf("%d", &a[i]);
31 build(rt[0], 1, n);
32 for (int i = 1; i <= m; i ++) {
33 int pre, opt, x, v;
34 scanf("%d %d %d", &pre, &opt, &x);
35 if (opt == 1) {scanf("%d", &v); ins(rt[i], rt[pre], 1, n, x, v);}
36 if (opt == 2) {printf("%d\n", query(rt[pre], 1, n, x)); rt[i] = rt[pre];/*复制相同版本*/}
37 }
38 return 0;
39 }

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

  1. bzoj3673可持久化线段树实现可持久化数组实现可持久化并查集(好长)

    线段树只用叶子节点感觉莫名浪费,,, 感觉真好写(刚从未来程序逃回来的人) #include <cstdio> #define mid ((l+r)>>1) ,ca,x,y; ...

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

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

  3. 洛谷P3994 Highway(树形DP+斜率优化+可持久化线段树/二分)

    有点类似NOI2014购票 首先有方程$f(i)=min\{f(j)+(dep_i-dep_j)*p_i+q_i\}$ 这个显然是可以斜率优化的... $\frac {f(j)-f(k)}{dep_j ...

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

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

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

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

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

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

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

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

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

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

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

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

  10. LuoguP3834 【模板】可持久化线段树 1(主席树)|| 离散化

    题目:[模板]可持久化线段树 1(主席树) 不知道说啥. #include<cstdio> #include<cstring> #include<iostream> ...

随机推荐

  1. 体验Lambda的更优写法和Lambda标准格式

    体验Lambda的更优写法 借助Java8的全新语法,上述Runnable接口的匿名内部类写法可以通过更简单的Lambda表达式达到等效: public class Lambda02 { public ...

  2. Ubu18远程登录密匙设置

    Ubu18设置远程密匙登录 相关文件 /etc/ssh/sshd_config 注意vscode使用博客园插件需要进行端口转发,在vscode端口处设置41385 本地生成密匙,任选一种,这里只介绍第 ...

  3. Vue3系列1--配置环境和创建项目

    1.安装nodejs(建议最新版本) 下载地址:下载 | Node.js 中文网 在安装的过程中建议不要装在C盘,安装完成配置环境变量,并且建议讲缓存路径更改. 安装完成后通过查看nodejs版本和n ...

  4. 用js获取当前页面的url

    1.获取当前或者指定页面的文件名或路径 window.location.pathname 2.设置或获取整个URl字符串 window.location.href 3.设置或获取URL相关的端口号 w ...

  5. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  6. Java学习(三)Java起源&发展

    目录 Java的诞生 C&C++ Java初生 Java发展(三高: 高可用,高性能,高并发) Java特性和劣势 Java程序运行机制 Java的诞生 C&C++ ​ **1972年 ...

  7. 抖音web端 s_v_web_id 参数生成分析与实现

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 抖音web端 s_v_web_id 参数 ...

  8. Docker Compose安装部署Jenkins

    流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置. 1.前言 数据卷挂载到 /var 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...

  9. vue 使用 monaco-editor 实现在线编辑器

    前言 项目里使用到 monaco-editor 编辑器,实现源码编辑器,看了很多网上教程,记录一下实现过程.在此之前引用很多博主的方法安装但是引入的时候,运行项目总是各种各样的错误,找不到头绪.终于在 ...

  10. HttpClient 在vivo内销浏览器的高并发实践优化

    作者:vivo 互联网服务器团队- Zhi Guangquan HttpClient作为Java程序员最常用的Http工具,其对Http连接的管理能简化开发,并且提升连接重用效率:在正常情况下,Htt ...