#include<bits/stdc++.h>
using namespace std;
using VI = vector<int>;
using ll = long long;
using PII = pair <int , int>;
const int mod = 998244353;
const int N = 1e5 + 10;
int tree[N << 1];
int n;
int lowbit(int x){
return x & -x;
}
void change(int p ,int x){
for(int i = p ; i <= N ; i += lowbit(i)){
tree[i] += x;
}
}
int query(int p){
int res = 0;
for(int i = p ; i ; i -= lowbit(i)){
res += tree[i];
}
return res;
}
int main(){
cin>>n;
VI a(n+1),l(n+1),r(n+1);
memset(tree , 0 , sizeof tree);
for(int i = 1 ; i <= n ; i++) cin>>a[i];
for(int i = 1 ; i <= n ; i++){
l[i] = query(a[i] - 1);
change(a[i] , 1);
}
memset(tree , 0 , sizeof tree);
for(int i = n ; i >= 1 ; i--){
r[i] = query(N) - query(a[i]);
change(a[i] , 1);
}
ll res = 0;
for(int i = 1 ; i <= n ; i++){
res = res + (ll)l[i] * (ll)r[i];
}
cout<<res;
}
树状数组维护桶,在有一点乘法原理把
枚举中间的数,考虑左边有多少个数小于他,右边有多少个数大于它