AT_tkppc6_2_a题解
题意
有一个数列
对于所有
- 对于所有
j (1≤j<i ),P_j>P_i 。
此题就是让我们求
证明:
首先,考虑边界情况,当
然后,假设对于一个长度为
对于长度为
不能比最后一个数大。
对于倒数第三个数及之前的所有数,都不能比倒数第二个数大。
根据第一个条件,倒数第二个数可以是
假设倒数第二个数选择了
对于剩下的
因此,对于长度为
综上所述,我们可以推导出对于任意的
但是此题的数据太恐怖,
那该怎么办呢? 这得使用快速幂。
今天我就跟你们讲一下快速幂吧!
快速幂算法是一种高效计算指数幂的算法,其基本思路是将指数进行二进制拆分,然后通过连续平方和积的方式来计算幂。
具体来说,设待计算的幂为
那么,
在计算时,我们可以利用以下性质:
若
若
根据这个性质,我们可以使用迭代的方式计算出
以下是一个使用快速幂算法计算
long long fastPower(long long x, long long n) {
long long result = 1;
while (n > 0) {
if (n % 2 == 1) { // 当当前位为 1 时,将该位的贡献乘到结果中
result = result * x % MOD;
}
x = x * x % MOD; // 将 x 的平方作为下一位的贡献
n /= 2; // n 右移一位,相当于将二进制位向右移动一位
}
return result;
}
通过使用快速幂算法,我们可以大大减少乘法的次数,从而提高计算效率。
完整代码就不放出来了。