Au2:
算法:动态规划
和银组第一题类似
定义$i$这个位置是前缀最大值当且仅当$a[i]>a[j]$ (for all $1\le j<i$)< p="">
我们会发现对于某个$(a[i],h[i])$相当于要求$[a[i]+1,h[i]-1]$这一段不能是前缀最大值,$h[i]$这个位置必须是前缀最大值
最终我们将相同情况的序列合并在一起,那么就是有最多$3*Q$段的序列(每一段内部要么要求一定是前缀最大值/一定不是前缀最大值/没有要求),求最终合法的方案数
定义$dp[i][j]$代表当前考虑到前$i$段数,选的数的最大值是$j$的方案数
假设当前这一段序列长度为$len$
当一定是前缀最大值时:
$dp[i][j]=\sum_{k=1}^{j-1} dp[i-1][k]$
当一定不是前缀最大值时:
$dp[i][j]=dp[i-1][j]*j^{len}$
当没有要求时:
$dp[i][j]=dp[i-1][j]j^{len} + \sum_{k=1}^{j-1} dp[i-1][k](j^{len} -(j-1)^{len})$
时间复杂度: $O(qclog)$