#include using namespace std; struct BIT { vector bit; BIT(int n) : bit(n) {} void update(int k, long long v) { for (k++; k < bit.size(); k += k & -k) { bit[k] += v; } } // [:k] long long query(int k) { long long res = 0; for (k++; k > 0; k -= k & -k) { res += bit[k]; } return res; } // [k:] long long query2(int k) { return query(bit.size() - 2) - query(k - 1); } }; int main() { int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); vector A(a); sort(A.begin(), A.end()); A.erase(unique(A.begin(), A.end()), A.end()); for (int i = 0; i < n; i++) { a[i] = lower_bound(A.begin(), A.end(), a[i]) - A.begin(); } BIT bit(A.size() + 10); BIT LL(A.size() + 10); BIT RR(A.size() + 10); vector L(A.size() + 2), R(A.size() + 2); for (int i = 0; i < n; i++) { R[a[i]]++; RR.update(a[i], 1); } long long res = 0; for (int i = 0; i < n; i++) { bit.update(a[i], (R[a[i]] - 1) * L[a[i]] - R[a[i]] * L[a[i]]); R[a[i]]--; RR.update(a[i], -1); res += -bit.query(a[i] - 1) + LL.query(a[i] - 1) * RR.query(a[i] - 1); res += -bit.query2(a[i] + 1) + LL.query2(a[i] + 1) * RR.query2(a[i] + 1); bit.update(a[i], R[a[i]] * (L[a[i]] + 1) - R[a[i]] * L[a[i]]); L[a[i]]++; LL.update(a[i], 1); } cout << res << endl; }