/ Vijos / 题库 /

可持久化数组

可持久化数组

时间限制:1秒  内存限制:256M


【题目描述】

  如题,你需要维护这样的一个长度为 \(N\) 的数组,支持如下几种操作:

  1. 在某个历史版本上修改某一个位置上的值
  2. 访问某个历史版本上的某一位置的值

  此外,每进行一次操作(对于操作 2,即为生成一个完全一样的版本,不作任何改动),就会生成一个新的版本。版本编号即为当前操作的编号(从 1 开始编号,版本 0 表示初始状态数组)

【输入格式】

  输入的第一行包含两个正整数 \(N,M\) , 分别表示数组的长度和操作的个数。
  第二行包含 \(N\) 个整数,依次为初始状态下数组各位的值(依次为 (a_i ,1≤i≤N))。
  接下来 \(M\) 行每行包含 3 或 4 个整数,代表两种操作之一( \(i\) 为基于的历史版本号):
  对于操作 1,格式为:\(v_i\ 1\ loc_i\ value_i\) ,即为在版本 \(v_i\)的基础上,将 \(a_{loc_i}\) 修改为 \(value_i\)
  对于操作 2,格式为:\(v_i\ 2\ loc_i\),即访问版本 \(v_i\) 中的 \(a_{loc_i}\) 的值

【输出格式】

  输出包含若干行,依次为每个操作2 的结果。

【输入输出样例】

 Input

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

 Output

59
87
41
87
88
46

【数据限制】

  对于 \(30\%\) 的数据,\(1≤N,M≤10^3\)
  对于 \(50\%\) 的数据,\(1≤N,M≤10^4\)
 对于 \(70\%\) 的数据,\(1≤N,M≤10^5\)
  对于 \(100\%\) 的数据,\(1≤N,M≤10^6,1≤loc_i≤N,0≤v_i<i,−10^9≤a_i,value_i≤10^9\)

【来源】

  Mr.he**

信息

ID
2597
难度
9
分类
数据结构 | 线段树 点击显示
标签
(无)
递交数
2
已通过
1
通过率
50%
被复制
2
上传者