#include<cstdio>
#define maxn 300005
#include<vector>
#include<algorithm>
using namespace std;
unsigned int n,nr,num;
vector <pair <int, unsigned int> > V;
vector <unsigned int> C;
int v[maxn],poz;
void update(int i,int left, int right){
if(left==right){
++v[i];
}
else{
int mij=(left+right)/2;
if(poz<=mij)
update(2*i,left,mij);
else
update(2*i+1,mij+1,right);
++v[i];
}
}
void query(int i,int left,int right){
if(left>poz ){
//if(left!=right)
num+=v[i];
// printf("DA%d %d %d %d \n",left,poz,right,v[i]);
// else
//num+=0;
return;
}
//printf("NU:%d %d %d %d \n",left,poz,right,v[i]);
int mij=(left+right)/2;
// query(2*i,left,mij);
//printf("l,m,r:%d %d %d\n",left,mij,right);
if(mij<=poz)
query(2*i+1,mij+1,right);
else
if(mij>poz){
query(2*i,left,mij);
query(2*i+1,mij+1,right);
}
//}
//else{
//}
}
/*int compare( const pair<int,int> a, const pair<int,int> b){
return a.first<b.first;
} */
int main(){
freopen("inv.in","r",stdin);
freopen("inv.out","w",stdout);
scanf("%u",&n);
C.resize(n+2);
V.push_back(make_pair(0,0));
for(int i=1;i<=n;++i){
scanf("%d",&nr);
V.push_back(make_pair(nr,i));
}
sort(V.begin()+1,V.begin()+n+1);
C[V[1].second]=1;
for(int i=2;i<=n;++i){
if(V[i-1].first==V[i].first)
C[V[i].second]=C[V[i-1].second];
else
C[V[i].second]=C[V[i-1].second]+1;
}
for(int i=1;i<=n;++i){
poz=C[i];
//printf("apeluri pentru:%d\n",nr);
query(1,1,n);
update(1,1,n);
}
printf("%d",num);
return 0;
}