#include <bits/stdc++.h>
using namespace std;
long long st[4000007];
int n,a[1000007];
map<int,int> c;
int f[1000007],f1[1000007];
void up(int id,int l,int r,int i,int x) {
  if (l>i||r<i) return ;
  if (l==r&&r==i) {
    st[id]+=x;
    return ;
  }
  int g=(l+r)>>1;
  up(id<<1,l,g,i,x);
  up(id<<1|1,g+1,r,i,x);
  st[id]=st[id<<1]+st[id<<1|1];
}
int get(int id,int l,int r,int u,int v){
  if (l>v||r<u) return 0;
  if (l>=u&&r<=v) return st[id];
  int g=(l+r)>>1;
  return get(id<<1,l,g,u,v)+get(id<<1|1,g+1,r,u,v);
}
int32_t main() 
{
    // freopen("maxsum.inp","r",stdin);
    // freopen("maxsum.out","w",stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>n;
    for (int i=1;i<=n;i++) cin>>a[i];
    for (int i=1;i<=n;i++) {
      c[a[i]]++;
      f[i]=c[a[i]];
    }
    c.clear();
    for (int i=n;i>0;i--) {
      c[a[i]]++;
      f1[i]=c[a[i]];
      up(1,1,n,f1[i],1);
    }
    long long ans=0;
    for (int i=1;i<=n;i++) {
      up(1,1,n,f1[i],-1);
      ans+=get(1,1,n,1,f[i]-1);
    }
    cout<<ans;
    return 0;
}