Pagini recente » Cod sursa (job #1742046) | Cod sursa (job #446598) | Cod sursa (job #2517466) | Cod sursa (job #152054) | Cod sursa (job #74564)
Cod sursa(job #74564)
#include<stdio.h>
#include<stdlib.h>
#define Nm 2002
int A[Nm],n;
unsigned M[Nm][Nm],ans;
void read()
{
int i;
freopen("psir.in","r",stdin);
scanf("%d",&n);
for(i=0;i<n;++i)
scanf("%d",A+i);
}
int cmp(const void *a, const void *b)
{
if(A[*(int*)a]<A[*(int*)b])
return -1;
return A[*(int*)a]>A[*(int*)b];
}
void solve()
{
int I[Nm],i,j,k;
for(i=0;i<n;++i)
I[i]=i;
qsort(I,n,sizeof(int),cmp);
j=A[I[0]]; A[I[0]]=k=1;
for(i=1;i<n;++i)
if(A[I[i]]==j)
A[I[i]]=k;
else
{
j=A[I[i]];
A[I[i]]=++k;
}
for(i=1;i<n;++i)
{
for(j=0;j<i;++j)
if(A[j]==A[i])
++ans;
else
if(A[j]<A[i])
M[i][A[j]]+=1+M[j][A[i]+1];
else
M[i][A[j]]+=1+M[j][A[i]-1];
for(j=2;j<A[i];++j)
M[i][j]+=M[i][j-1];
for(j=k-1;j>A[i];--j)
M[i][j]+=M[i][j+1];
ans+=M[i][A[i]-1]+M[i][A[i]+1];
}
}
void write()
{
freopen("psir.out","w",stdout);
printf("%u\n",ans);
}
int main()
{
read();
solve();
write();
return 0;
}