这个题一年前就该补了………………
首先转化为下标变换,这样本来是值的变换,最终就是个逆。(当然你要觉得值变换好理解我也不拦你)
然后 (2leftrightarrow1) 这玩意可以建个 012Trie 在上面打懒标记,就交换了 (son_1,son_2) 之后下传。这样就不用担心什么了。
然后考虑加法怎么在 Trie 上体现。由于加法的进位是从低位往高位的,我们考虑把 Trie 倒着建,低位在上面,这样显然是不影响操作 S 的。反正给我自己想我是想不到,被思维定势了,一般 Trie 正着建是因为要按位贪心。
那么 R 操作就是 (son_0) 整体迁移至 (son_1),(son_1 o son_2),而 (son_2) 的变换不只是 ( o son_0) 这么简单,它内部还要进位,于是往下走做类似的事情即可,复杂度 (mathrm O(n))。
最终复杂度 (mathrm O(qn)),code。