Pagini recente » Cod sursa (job #1589) | Cod sursa (job #667045) | Cod sursa (job #697976) | Cod sursa (job #164829) | Cod sursa (job #578071)
Cod sursa(job #578071)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define Nmx 2006
using namespace std;
int n,Poz[Nmx],D[Nmx];
unsigned sol,Rez[Nmx][Nmx];
struct dat{int v, pz;}A[Nmx];
struct cmp
{
bool operator () ( const dat &a,const dat &b) const
{
return a.v<b.v;
}
};
void read()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&A[i].v);
A[i].pz=i;
}
}
void solve()
{
int p;
sort(A+1,A+n+1,cmp());
p = 0;
for(int i=1;i<=n;i++)
{
if(A[i].v!=A[i-1].v)
p++;
Poz[A[i].pz]=p;
}
for(int i=1; i<=n; i++) {
memset(D,0,sizeof(D));
for(int j=1;j<Poz[i]; j++)
D[j]=D[j]+Rez[j][n]-Rez[j][Poz[i]];
for(int j=Poz[i]+1;j<=n;j++)
D[j]=D[j]+Rez[j][Poz[i]-1];
for(int j=1;j<i;j++)
D[Poz[j]]=D[Poz[j]]+1;
for(int j=1;j<=n;j++)
{
D[j]=(D[j]+D[j-1]);
Rez[Poz[i]][j]=Rez[Poz[i]][j]+D[j];
}
}
}
int main()
{
freopen("psir.in","r",stdin);
freopen("psir.out","w",stdout);
read();
solve();
for(int i=1;i<=n;i++)
sol=(sol+Rez[i][n]);
printf("%u\n",sol);
return 0;
}