#CSPJFS01. ⼤⻥吃⼩⻥(fish)

⼤⻥吃⼩⻥(fish)

你是⼀条刚诞⽣的⼩⻥,初始质量为 M。你即将踏上⼀段进化的旅程,旅程中有 n 个关键节点,你需要 按顺序(从1到n)⼀⼀经过。 在每个节点 i,你会遇到⼀只魔法⻥,它携带有⼀种魔法能量。此时,你⾯临⼀个抉择: 选择⼀:吞噬。吞噬这只魔法⻥,你的质量将根据⻥的种类和能量值 V 发⽣改变。 选择⼆:忽略。忽略这只魔法⻥,你的质量将保持不变。

魔法⻥共有四种类型:

加法⻥ (+): 吞噬后,你的新质量会变为 当前质量 + V。

乘法⻥ (*): 吞噬后,你的新质量会变为 当前质量 * V。

取⼤⻥ (m): 吞噬后,你的新质量会变为 max(当前质量, V)。

重置⻥ (=): 吞噬后,你的新质量会直接变为 V。

这⽚海域⾮常奇特,你的质量可以变为负数,并且任何种类的魔法⻥,**其能量值 V 都可能是⼀个负数 **。你的⽬标是,在经历所有 n 个节点并做出最优选择后,让⾃⼰的最终质量达到最⼤。请计算出这个 可能的最⼤质量。

输⼊格式(Format Input)

第⼀⾏包含两个整数 n 和 M,分别表示节点的数量和你的初始质量。 接下来 n ⾏,每⾏描述⼀个节点的魔法⻥,包含⼀个字符 op 和⼀个整数 V。

输出格式(Format Output)

输出⼀个整数,表示你最终能达到的最⼤质量。

输⼊样例 1(Sample Input 1)

5 5

++ 5

* -10

m 20

== -200

* -5

输出样例 1(Sample Output 1

1000

_时间限制(Time Limit):_1000 ms
内存限制(Memory Limit): 65536 KB

说明/提示

数据范围与约定

对于 30% 的数据,保证n<=20 ,且没有乘法⻥。 对于另外30% 的数据,保证n<=2000 ,且所有乘法⻥的能量值 V 均为正数。 对于所有100% 的数据,保证 1<=n<=200000,∣M∣,∣V∣<=10的9次方 。 对于所有100% 的数据,保证结果 <=2的63次方- 1

解析

如果M和V都是整数,过程中只要变⼤,就改变 但是M和V可以为负数,意味⼀个负数最⼩值,通过*⼀个负数V,可能变成整数最⼤值 需要在这个过程中,同时维护最⼤值,和最⼩值