#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int N = 1e6+5;

int n, a[N];
int L[N], R[N], cnt[N];

int bit[N];

void update(int p, int v) {
    for (; p <= n; p += p & -p) bit[p] += v;
}

int query(int p) {
    int s = 0;
    for (; p > 0; p -= p & -p) s += bit[p];
    return s;
}

void solve() {
    cin >> n;
    vector<int> vals;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        vals.push_back(a[i]);
    }
    sort(vals.begin(), vals.end());
    vals.erase(unique(vals.begin(), vals.end()), vals.end());
    for (int i = 1; i <= n; i++) a[i] = lower_bound(vals.begin(), vals.end(), a[i]) - vals.begin() + 1;
    for (int i = 1; i <= n; i++) L[i] = ++cnt[a[i]];
    fill(cnt + 1, cnt + n + 1, 0);
    for (int i = n; i >= 1; i--) R[i] = ++cnt[a[i]];
    ll ans = 0;
    for (int i = n; i >= 1; i--) {
        if (L[i] > 1) ans += query(L[i] - 1);
        update(R[i], 1);
    }
    cout << ans << '\n';
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int tests = 1; // cin >> tests;
    while (tests--) solve();

    #ifdef LOCAL
    cerr << "\nTime elapsed: " << clock() << " ms.\n";
    #endif

    return 0;
}
