我们要统计满足 1 ≤ i < j < k ≤ n
且 a_i < a_j < a_k
的三元组数量。一个常见且高效的做法是把每个位置 j
当作“中间点”,计算:
L[j]
:在 j
左侧小于 a_j
的元素个数R[j]
:在 j
右侧大于 a_j
的元素个数则以 j
为中点能形成的合法三元组数为 L[j] * R[j]
,答案为对所有 j
的求和。
为高效统计区间个数,使用数据结构:树状数组(Fenwick Tree)。由于数值范围可能较大或稀疏,先对数组进行值离散化(坐标压缩),把每个 a_i
映射到 [1..m]
的秩。
宇宙勇者很到了一条特殊的能量项链,能够给他提供战斗所需的能量,帮助他打倒更多的怪兽。这个项链的前面像嵌了 n 颗宇由宝石,每一颗宇宙宝石都有特定的能量值。
科学院测算了这条能量项链,得出它的 n 颗宇宙宝石的能量值分别为 a1,a2,...,an 。聪明的科学家们还研究出了能量项链的规则:
如果存在一个三元组 (i,j,k) 同时满足下面两个条件:
(1)1<=i<j<k<=n
(2)ai<aj<ak
那么这个三元组对应的三颗宝石就能组成法阵,为勇者规供战斗 1 分钟的能量。请帮勇者计算一下这条能量项游能为他提供战斗多少分钟的能量。
第一行有一个整数 n(1<=n<=30000) 。
随后有 n 个整数 a1,a2,…,an(1<=ai<=100000) ,代表能量项链上第 i 颗宇宙宝石的能量。注意:宇宙宝石只是在能量项链的前面镶嵌,并非一个环形,即 ai 和 an 不相邻。
输出一个整数,代表题目所求答案。
输入
4
22 11 66 99
输出
2