#P1397. 可持久化变量(var)

可持久化变量(var)

时间限制:C/C++1C/C++1秒,其他语言22秒 空间限制:C/C++256MBC/C++ 256 MB,其他语言512MB512 MB

题目描述

ww最近在学习可持久化数据结构,不过小w越学越困,然后他...他就睡着了。在梦境的世界中,他发现有一种可持久化的变量。只要用这种变量写出来的数据结构,都能变成可持久化数据结构。比如用这种变量开一个数组,这个数组就是一个可持久化数组,用这种变量写一颗线段树,线段树也变成可持久化线段树了。小w梦醒以后十分生气,因为现实中并不存在这么一种能够可持久化的变量。现在他把这个任务交给了你。

现在让你维护一个变量,变量的初始值为0并且该变量的值将不会超过int类型的范围,该变量支持以下四种操作:

ADD(x)操作,该变量的值增加x。

SUB(x)操作,该变量的值减少x。

SET(x)操作,设定该变量的值为x。

BACK(x)操作,回溯之前的x个操作,也就是x一定小于等于之前输入的操作总数(1\leqx\leq已经输入的 操作总数)。

例如BACK(1)表示回溯到上次操作前的状态,BACK(3)表示以当前操作为基准回溯到前3次操作前的状态,注意BACK操作本身也算作操作。

你需要在每一个操作之后,输出这个变量现在的值,输出的整数之间用空格隔开,行末不允许有多余空格。

输入描述:

第一行输入一个正整数n,表示操作的个数。 接下来n行,每行输入一个字符串OP和一个整数x。OP只能是"ADD"、"SUB"、"BACK"、"SET"的其中之一,意义见上文。

输出描述:

输出一行n个整数,表示这个变量在每一个操作后的值,输出的整数之间用空格隔开,行末不允许有多余空格。

示例11

输入

7
ADD 2
SUB 3
BACK 1
BACK 1
BACK 1
BACK 2
SET 5

输出

2 -1 2 -1 2 2 5

说明

①在增加2以后,变量的值为2。

②在减少3以后,变量的值为-1。

③向前回溯1次操作后变量的值与①状态时相同,变量的值变为2。

④向前回溯1次操作后变量的值与②状态时相同,变量的值变为-1。

⑤向前回溯1次操作后变量的值与③状态时相同,变量的值为2。

⑥向前回溯2次操作后变量的值与③状态时相同,变量的值为2。

⑦直接设置变量的值为5。

备注:

对于10%的测试数据,保证1n10,1x10001\leq n\leq10, 1\leq x\leq1000

对于100%的测试数据,保证1n105,1x10001\leq n\leq10^5, 1\leq x\leq1000,保证BACK操作中1x1\leq x \leq当前已操作总数,并且在运算的过程中以及最终答案不会超过int型所表示的范围。

对于测试点2,在满足100%的测试数据的基础上额外保证只含有ADD、SUB两个操作。

对于测试点3,在满足100%的测试数据的基础上额外保证只含有ADD、SUB、SET三个操作。

百度网盘大样例下载 提取码: GFOI

阿里云盘大样例下载

夸克云盘大样例下载