分析问题经典手法,看出相当于给每个位置附上一个 \(2^{k_i}\) 的权,我们希望尽量大的地方 \(k_i\) 越小,则 \(a_i\) 越大越应该靠后合并,那么问题被刻画为,每一个值域前缀在序列上都是一段区间。
考虑正难则反,一个合法串每次最左或者最右一定是最大的数,考虑从大往小做,由于此时决策到 \(x\) 比 \(x\) 大的一定与其不影响,所以此时只需要写一个数据结构维护一下到底是放最左还是最右即可,需要注意一下 \(x\) 可能有很多个的情况,不过这并不影响这个做法的逻辑。
分析问题经典手法,看出相当于给每个位置附上一个 \(2^{k_i}\) 的权,我们希望尽量大的地方 \(k_i\) 越小,则 \(a_i\) 越大越应该靠后合并,那么问题被刻画为,每一个值域前缀在序列上都是一段区间。
考虑正难则反,一个合法串每次最左或者最右一定是最大的数,考虑从大往小做,由于此时决策到 \(x\) 比 \(x\) 大的一定与其不影响,所以此时只需要写一个数据结构维护一下到底是放最左还是最右即可,需要注意一下 \(x\) 可能有很多个的情况,不过这并不影响这个做法的逻辑。