# 变量列表 预估时间限制:0.5 秒。内存限制:128 MB。 实际时限以标准程序在目标评测环境的最慢用例中位时间乘以 $2$ ,按 $0.5$ 秒向上取整。参考环境见[评测说明](../../../docs/评测环境与性能.md)。 ## 背景故事 一个可视化编辑器把每个子程序的局部变量放在独立列表中。程序员会插入、删除变量,也会修改备注;你需要维护这些列表,并查询某个变量及其相邻变量的备注。 ## 形式化问题描述 有 $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` .编号尚未分配或变量已删除时忽略。 | 每次插入得到全新的编号,等于初始变量数加上截至此次的插入次数;备注初始等于这个编号。删除不回收编号。列表可以被删空,向空列表的头部或尾部插入都会形成单元素列表。修改备注不改变编号。 ![样例一的初始列表及第八个操作完成后的列表,结点标注编号与备注](assets/lists.svg) 图中标签为“编号:备注”,箭头表示列表内的前后关系。上下两组分别是样例 1 的初始状态和完成第 $8$ 个操作后的状态。 ## 输入格式 第一行一个整数 $n$ .第二行包含 $n$ 个整数 $c_1,\ldots,c_n$ .第三行一个整数 $m$ ,表示操作数。接下来 $m$ 行,每行按上表给出一个操作。 ## 输出格式 只对 `1 id` 操作输出一行三个条目,依次为前驱、自身、后继的备注或 `NULL` ,条目之间用一个空格隔开。 ## 样例 ### 样例 1 ### 输入 ```text 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 ``` ### 输出 ```text 1 2 NULL NULL 3 NULL NULL 1 -7 NULL -7 NULL NULL 4 -7 3 5 NULL NULL NULL NULL ``` ### 样例 2 ### 输入 ```text 1 1 9 2 1 1 1 1 2 3 1 1 2 2 2 4 1 1 3 1 0 ``` ### 输出 ```text NULL NULL NULL NULL NULL NULL NULL 2 NULL NULL 3 NULL NULL NULL NULL ``` ### 样例 3 ### 输入 ```text 1 2 5 5 1 42 5 2 42 1 1 2 1000000000 1 2 ``` ### 输出 ```text 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% | 无额外条件 |