发现没法直接求,但是正难则反。
考虑取补集。
题目要求满足 i<j<k,ai<ak,aj>ak 的 (i,j,k) 的个数。
转化一下,相当于满足 i<j<k,ai<aj,ai<ak 的个数减去满足 i<j<k,ai<aj,aj<ak 的个数。
前者,对于每个 i,设满足 i<j,ai<aj 的 j 的个数为 cnt,可以发现相当于 C2cnt。
后者,考虑 DP。
设 fi,j 表示以 ai 结尾长度为 j 的上升子序列的个数。
那么相当于 n∑i=1fi,3。
j 最多是 3,所以可以用数据结构(如 BIT)优化转移。
本人使用两个 BIT,复杂度 O(nlogn)。
代码:
1 |
|