思路
朴素
容易发现一个人资金变化是这样的:
- 对于 \(op = 1\) 的情况, 会将其直接变成 \(x\)
- 对于 \(op = 2\) 的情况, 将其变成 \(\max (x, 当前值)\)
直接用线段树暴力的维护即可
巧妙
容易发现 \(op = 2\) 相当于一个大保底, 我们先倒着处理出每个人到 \(i\) 位置至少有多少钱
特别的, 正着搜一遍, 如果发现一个 \(op = 1\) 的操作, 那么当前的人持有的钱就是 \(i\) 后面的大保底和当前钱数的大值
总结
善于利用 \(\rm{lazy \ tag}\)
正反两边一起搜可以解决一类特殊问题
对于一种操作会清空另一种操作的特殊 \(\rm{trick}\) :
先维护倒着被清空这种操作, 然后顺着做, 可以考虑到后面的情况