atcoder#ABC273E. [ABC273E] Notebook

[ABC273E] Notebook

题目描述

整数列 A A とノートがあります。ノートには 109 10^9 枚のページがあります。

Q Q 個のクエリが与えられます。各クエリは下記の 4 4 種類のいずれかです。

ADD x x : 整数 x x A A の末尾に追加する。

DELETE : A A の末尾の要素を削除する。ただし、A A が空である場合は何もしない。

SAVE y y : ノートの y y ページ目に書かれている数列を消し、代わりに現在の A A y y ページ目に書き込む。

LOAD z z : A A をノートの z z ページ目に書かれている数列で置き換える。

はじめ、A A は空列であり、ノートのすべてのページには空列の情報が書かれています。 その初期状態から、Q Q 個のクエリを与えられる順に実行し、各クエリの実行直後における A A の末尾の要素を出力してください。

なお、入出力の量が多くなる場合があるので、高速な方法で入出力を行うことを推奨します。

输入格式

入力は以下の形式で標準入力から与えられる。

Q Q query1 \mathrm{query}_1 query2 \mathrm{query}_2 \vdots queryQ \mathrm{query}_Q

输出格式

下記の形式にしたがい、i = 1, 2, , Q i\ =\ 1,\ 2,\ \ldots,\ Q について、i i 番目までのクエリを実行した直後の A A の末尾の要素 Xi X_i を( A A が空の場合は Xi := 1 X_i\ :=\ -1 とする)出力せよ。

X1 X_1 X2 X_2 \ldots XQ X_Q

题目大意

有一个版本保存系统,共有 10910^9 个版本,每个版本初始都为空列表,还需要维护一个列表(后称为“当前列表”)。
您需要实现如下四种操作:

  • ADD x:在当前列表的末尾添加 xx
  • DELETE:如果当前列表非空,把当前列表的末尾最后一个数删除。否则,什么也不做。
  • SAVE x:把当前列表保存至第 xx 版本(在此后完成的操作不会在第 xx 版本中出现,而且保存后当前列表不清空)
  • LOAD x:把当前列表变成第 xx 版本(直接赋值,而不是添加,而且保存后第 xx 版本不清空)
    给定 qq 次操作,每次操作是以上四种操作,求每次操作的当前列表的末尾最后一个数(若数组为空输出 1-1)。
11
ADD 3
SAVE 1
ADD 4
SAVE 2
LOAD 1
DELETE
DELETE
LOAD 2
SAVE 1
LOAD 3
LOAD 1
3 3 4 4 3 -1 -1 4 4 -1 4
21
ADD 4
ADD 3
DELETE
ADD 10
LOAD 7
SAVE 5
SAVE 5
ADD 4
ADD 4
ADD 5
SAVE 5
ADD 2
DELETE
ADD 1
SAVE 5
ADD 7
ADD 8
DELETE
ADD 4
DELETE
LOAD 5
4 3 4 10 -1 -1 -1 4 4 5 5 2 5 1 1 7 8 7 4 7 1

提示

制約

  • 1  Q  5 × 105 1\ \leq\ Q\ \leq\ 5\ \times\ 10^5
  • 1  x, y, z  109 1\ \leq\ x,\ y,\ z\ \leq\ 10^9
  • Q, x, y, z Q,\ x,\ y,\ z は整数
  • 与えられるクエリは問題文中の 4 4 種類のいずれか

Sample Explanation 1

はじめ、A A は空列、すなわち A = () A\ =\ () であり、ノートのすべてのページには空列の情報が書かれています。 - 1 1 番目のクエリによって、 A A の末尾に 3 3 が追加され、A = (3) A\ =\ (3) となります。 - 2 2 番目のクエリによって、ノートの 1 1 ページ目に書かれた数列が (3) (3) になります。A A は変わらず A = (3) A\ =\ (3) です。 - 3 3 番目のクエリによって、 A A の末尾に 4 4 が追加され、A = (3, 4) A\ =\ (3,\ 4) となります。 - 4 4 番目のクエリによって、ノートの 2 2 ページ目に書かれた数列が (3, 4) (3,\ 4) になります。A A は変わらず A = (3, 4) A\ =\ (3,\ 4) です。 - 5 5 番目のクエリによって、 A A がノートの 1 1 ページ目に書かれた数列 (3) (3) で置き換えられ、A = (3) A\ =\ (3) となります。 - 6 6 番目のクエリによって、 A A の末尾の要素が削除され、A = () A\ =\ () となります。 - 7 7 番目のクエリでは、A A がすでに空であるので何もしません。A A は変わらず A = () A\ =\ () です。 - 8 8 番目のクエリによって、 A A がノートの 2 2 ページ目に書かれた数列 (3, 4) (3,\ 4) で置き換えられ、A = (3, 4) A\ =\ (3,\ 4) となります。 - 9 9 番目のクエリによって、ノートの 1 1 ページ目に書かれた数列が (3, 4) (3,\ 4) になります。A A は変わらず A = (3, 4) A\ =\ (3,\ 4) です。 - 10 10 番目のクエリによって、 A A がノートの 3 3 ページ目に書かれた数列 () () で置き換えられ、A = () A\ =\ () となります。 - 11 11 番目のクエリによって、 A A がノートの 1 1 ページ目に書かれた数列 (3, 4) (3,\ 4) で置き換えられ、A = (3, 4) A\ =\ (3,\ 4) となります。