一、题目
点此看题
二、解法
如何求解这个表达式的值?一个很显然的想法就是找到优先级最小的运算符然后把整个表达式分成两半,递归求解。
我们需要维护一棵表达式树,比如说
treap,它满足下列性质:
- 每个节点是一个数字,或者是一个操作符。
- 中序遍历结果原本的表达式。
- 将数字视为最大的优先级,父节点的优先级小于子节点的优先级。
举个例子,(用了JZM的图,
qwq)
还是按位置排序,但是我们的
fix就变成了优先级,这样一看,复杂度似乎得不到保证。
我们使用奇技淫巧:对于相同优先级的点
a,b,合并的时候以子树大小加权,概率选一个作为根,如
a的概率是
sa+bbsa,
b的概率同理。这样的随机化可以保证均摊复杂度为
O(k+logn),建好树后暴力算即可。
咕咕咕