前置知识树状数组https://oi-wiki.org/ds/fenwick/ 对于目前的i只需要利用map映射f(1,i,ai)的值就可以知道也就是mp[a[i]],怎么快速知道有多少个f(j,n,aj)小于mp[a[i]],用一个树状数组维护,就可以直接区间查找了. 具体做法 add(f(j,n,aj),1),1<=j<=n 枚举i然后add(f(i,n,ai),−1)ans+=query(1,f(i,n,ai)−1) 整体时间复杂度o(nlog2n)
小红有一个长度为n的数组a,记f(l,r,x)为区间[l,r]内x的出现次数。
现在小红想知道有多少对i<j满足f(1,i,ai)>f(j,n,aj)。
第一行输入一个整数 n
第二行n个整数a1,a2,...,an。
1≤n≤105
1≤ai≤109
输出一个整数表示答案。
输入
6
1 2 1 2 2 1
输出
5
存在以下五对(i,j)满足条件:(3,5)(3,6)(4,5)(4,6)(5,6)
输入
输出