变量列表¶
预估时间限制:0.5 秒。内存限制:128 MB。
实际时限以标准程序在目标评测环境的最慢用例中位时间乘以 \(2\) ,按 \(0.5\) 秒向上取整。参考环境见评测说明。
背景故事¶
一个可视化编辑器把每个子程序的局部变量放在独立列表中。程序员会插入、删除变量,也会修改备注;你需要维护这些列表,并查询某个变量及其相邻变量的备注。
形式化问题描述¶
有 \(n\) 个列表。第 \(i\) 个列表初始包含 \(c_i\) 个变量。按列表编号从小到大、列表内部从前到后的顺序,给初始变量连续编号为 \(1,2,\ldots,C\) ,其中 \(C=\sum_{i=1}^n c_i\) .每个变量的初始备注等于其编号。
支持以下操作:
| 操作 | 含义 |
|---|---|
1 id |
查询该变量的前驱、自身、后继的备注,邻接关系仅在所属列表内考虑。缺少的前驱或后继输出 NULL ;变量不存在或已删除时输出三个 NULL . |
2 id |
删除该变量。编号尚未分配或变量已删除时忽略。 |
3 nid |
在第 nid 个列表开头插入变量。 |
4 nid |
在第 nid 个列表结尾插入变量。 |
5 id x |
将该变量的备注改为 x .编号尚未分配或变量已删除时忽略。 |
每次插入得到全新的编号,等于初始变量数加上截至此次的插入次数;备注初始等于这个编号。删除不回收编号。列表可以被删空,向空列表的头部或尾部插入都会形成单元素列表。修改备注不改变编号。
图中标签为“编号:备注”,箭头表示列表内的前后关系。上下两组分别是样例 1 的初始状态和完成第 \(8\) 个操作后的状态。
输入格式¶
第一行一个整数 \(n\) .第二行包含 \(n\) 个整数 \(c_1,\ldots,c_n\) .第三行一个整数 \(m\) ,表示操作数。接下来 \(m\) 行,每行按上表给出一个操作。
输出格式¶
只对 1 id 操作输出一行三个条目,依次为前驱、自身、后继的备注或 NULL ,条目之间用一个空格隔开。
样例¶
样例 1¶
输入¶
2
2 1
12
1 2
1 3
5 2 -7
1 1
2 1
1 2
3 1
4 2
1 4
1 5
2 2
1 2
输出¶
1 2 NULL
NULL 3 NULL
NULL 1 -7
NULL -7 NULL
NULL 4 -7
3 5 NULL
NULL NULL NULL
样例 2¶
输入¶
1
1
9
2 1
1 1
1 2
3 1
1 2
2 2
4 1
1 3
1 0
输出¶
NULL NULL NULL
NULL NULL NULL
NULL 2 NULL
NULL 3 NULL
NULL NULL NULL
样例 3¶
输入¶
1
2
5
5 1 42
5 2 42
1 1
2 1000000000
1 2
输出¶
NULL 42 42
42 42 NULL
样例解释¶
样例 1 中,编号 \(2\) 的备注改为 \(-7\) 后,查询编号 \(1\) 会看到新的后继备注;删除编号 \(1\) 后,编号 \(2\) 没有前驱。样例 2 表明编号不会复用。样例 3 中两个变量可以拥有相同备注,仍由不同编号区分。
数据范围与保证¶
对 100% 的数据:\(1\le n\le500\) ,\(1\le c_i\le1000\) ,\(1\le m\le5\times10^5\) .插入操作满足 \(1\le\mathrm{nid}\le n\) ;其他操作的编号和备注满足 \(|\mathrm{id}|,|x|\le10^9\) .所有操作类型都属于上述五种。
| 分值比例 | 额外条件 |
|---|---|
| 100% | 无额外条件 |