#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e6 + 6;
long long n, ar[maxn], node[4 * maxn], L[maxn], R[maxn], ans;
long long calc(long long v, long long x, long long l, long long r) {
  if (r - l == 1) return 0;
  long long med = (l + r) / 2;
  if (x < med)
    return calc(v * 2, x, l, med) + node[2 * v + 1];
  else
    return calc(v * 2 + 1, x, med, r);
}
void update(long long v, long long x, long long l, long long r) {
  if (r - l == 1) {
    node[v]++;
    return;
  }
  long long med = (l + r) / 2;
  if (x < med)
    update(v * 2, x, l, med);
  else
    update(v * 2 + 1, x, med, r);
  node[v]++;
}
map<long long, long long> mp;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (long long i = 0; i < n; i++) cin >> ar[i];
  for (long long i = 0; i < n; i++) L[i] = ++mp[ar[i]];
  mp.clear();
  for (long long j = n - 1; j > -1; j--) R[j] = ++mp[ar[j]];
  update(1, L[0], 0, n);
  for (long long i = 1; i < n; i++) {
    ans = ans + calc(1, R[i], 0, n);
    update(1, L[i], 0, n);
  }
  cout << ans;
  return 0;
}
