可持久化数组

金牌导航 可持久化数据结构-3

题目大意

给出一个序列a,让你执行若干操作,操作分为两种:
1.继承第v次操作后把第x个数改成y
2.查询第v次操作的第x个数的值

输入样例

5 10
59 46 14 87 41
0 2 1
0 1 1 14
0 1 1 57
0 1 1 88
4 2 4
0 2 5
0 2 4
4 2 1
2 2 2
1 1 5 91

输出样例

59
87
41
87
88
46

数据范围

1⩽N,M⩽106,1⩽xi⩽N,0⩽vi<i,−109⩽ai,yi⩽1091\leqslant N,M\leqslant 10^6,1\leqslant x_i\leqslant N,0\leqslant v_i< i,-10^9\leqslant a_i,y_i\leqslant 10^91⩽N,M⩽106,1⩽xi​⩽N,0⩽vi​<i,−109⩽ai​,yi​⩽109

解题思路

如果直接暴力存数组,每次操作copy一遍会TLE/MLE
这里可以用搜索树的方法,就是把每个操作和所继承的操作连一条边,然后搜索即可,时间O(m)O(m)O(m)(这里不做详解)
对于这样一个序列,可以用主席树来维护
对于每次修改就和模板一样,然后查询就直接搜目标节点即可
时间O(mlogn)O(mlogn)O(mlogn),不如搜索树?

代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define N 1000010
using namespace std;
int n, m, x, y, v, p, w, g, num, a[N], s[N << 5], ls[N << 5], rs[N << 5], root[N];
int build(int l, int r) {int x = ++w;if (l == r) {s[x] = a[l];return x;}int mid = (l + r) >> 1;ls[x] = build(l, mid);rs[x] = build(mid + 1, r);return x;
}
int change(int lst, int v, int y, int l, int r) {int x = ++w;if (l == r) {s[x] = y;return x;}int mid = (l + r) >> 1;if (v <= mid)ls[x] = change(ls[lst], v, y, l, mid), rs[x] = rs[lst];elsels[x] = ls[lst], rs[x] = change(rs[lst], v, y, mid + 1, r);return x;
}
int ask(int v, int x, int l, int r) {if (l == r) {return s[v];}int mid = (l + r) >> 1;if (x <= mid)return ask(ls[v], x, l, mid);elsereturn ask(rs[v], x, mid + 1, r);
}
int main() {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) {scanf("%d%d%d", &v, &p, &x);if (p & 1) {scanf("%d", &y);root[i] = change(root[v], x, y, 1, n);//修改} else {root[i] = root[v];//数组没变,直接copyprintf("%d\n", ask(root[v], x, 1, n));//查询}}return 0;
}

【主席树】可持久化数组(金牌导航 可持久化数据结构-3)相关推荐

  1. 【树链剖分】【线段树】树的统计(金牌导航 树链剖分-1)

    树的统计 金牌导航 树链剖分-1 题目大意 给出一棵树,让你做若干操作,操作如下: 1.修改一个节点的值 2.查询两个节点之间路径的最大值 3.查询两个节点之间路径的和 输入样例 4 1 2 2 3 ...

  2. 【用学校抄作业带你走进可持久化线段树(主席树)】可持久化线段树概念+全套模板+例题入门:[福利]可持久化线段树)

    我似乎很少写这种算法博客 可持久化线段树概念 概念介绍(类比帮助理解) 简单分析一下时间和空间复杂度(内容池) 模板 结构体变量 建树模板 单点修改模板 单点查询模板 区间修改模板(pushup) 区 ...

  3. 主席树有关的一些题目(持续更新)

    主席树 模板 P3919 [模板]可持久化线段树 1(可持久化数组) #include <bits/stdc++.h>using namespace std;const int N = 1 ...

  4. 【以前的空间】主席树

    主席树 周五晚蔡大神讲了下,觉得不是很难的东西,然后就可是敲,发现好像就是个持久化线段树(?!) 当晚笔记: 主席树,其实就是多棵可持久化权值线段树 那什么是可持久化线段树呢? 如树1中就在子树i,树 ...

  5. [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)

    题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...

  6. [BZOJ4605]崂山白花蛇草水(主席树套kd-tree)

    题意:两种操作,在二维平面插入一个点及其权值,查询矩形区间第k大,强制在线. 之前考试考过一个矩形区间第k大的题..当时想了各种树套树套树,算了算复杂度都没有暴力快..后来憋了个kd-tree套主席树 ...

  7. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

  8. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

    正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti​时在wiw_iwi​出现(只出现一个单位时间),价值为sis_isi​,当你t ...

  9. 【树状数组】递增子序列(金牌导航 数据结构优化DP-1)

    递增子序列 金牌导航 数据结构优化DP-1 题目大意 给出一个序列,让你求长度为m的单调递增子序列的个数 输入样例 3 2 1 1 2 7 3 1 7 3 5 9 4 8 输出样例 2 12 数据范围 ...

最新文章

  1. 回望2018,展望2019
  2. 没人比程序猿更讨厌软件
  3. Java实现自动生成Mysql数据库表实体类
  4. source insight和vim同时使用
  5. Flume实操(三)【实时读取目录文件到HDFS案例】
  6. 数组序列化 java_Java基础之数组序列化、反序列化 小发现(不知道 是不是有问题)...
  7. div固定大小文字溢出自动缩小_Figma 教程 | 文字工具
  8. uitableview 弹性_iOS UITableView滚动头图 拉伸放大效果 (头部弹性效果) 增加iOS11支持 附有demo...
  9. 安装python第三方库
  10. 用账号连无线网怎么连接网络连接服务器,路由器怎么共用一个宽带账号
  11. 正则表达式确实是一种考验
  12. SEO:避免关键词内部竞争带来的无法收录问题,
  13. 实验9-编程显示字符串
  14. bmfont使用心得
  15. Python编程题汇总(附答案)
  16. 《黑客之道》- 全网最详细的kali系统安装教程
  17. linux内存扩展,linux 扩展内存
  18. 彻底解决CUDA安装,从翻译文档开始_Compiling CUDA Programs
  19. 牵手华为冲刺L2++市场,这家国产厂商的自动驾驶版图再扩张
  20. crmeb多商户系统安装(1)

热门文章

  1. mysql sp who_对ASE系统存储过程的剖析-sp_who
  2. oracle 动态游标行数,oracle动态游标的简单实现方法
  3. mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接
  4. 算法题目——子序列和问题(poj-3061)(尺取法)
  5. java实用教程——组件及事件处理——DocumentEvent事件
  6. 7-3 符号三角形 (10 分)(思路+详解)
  7. C++实现拓扑排序(vector模拟邻接表存储,优先队列实现)
  8. 图的最小生成树和最短路径算法思路总结(Prim,Kruskal,Dijkstra,Floyd)
  9. SpringCloud Alibaba 框架下公司架构图
  10. vue2实践揭秘pdf_《Vue2.0 实践揭秘》终于出版啦!