Pagini recente » Cod sursa (job #2438558) | Cod sursa (job #344507) | Cod sursa (job #1341198) | Cod sursa (job #266110) | Cod sursa (job #69000)
Cod sursa(job #69000)
#include <stdio.h>
using namespace std;
#define in "psir.in"
#define out "psir.out"
#define dim 2001
int N;
long long P[dim], D[dim];
unsigned B[dim][dim], C[dim];
void Qsort(int,int);
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d", &N);
for ( int i = 1; i <= N; i++ )
scanf("%lld", &D[i]), P[i] = D[i];
Qsort(1,N);
for ( int i = 1; i < N; i++ )
for ( int j = i+1; j <= N; j++ )
B[j][i] = 1;
C[0] = 0;
for ( int j = 1; j <= N; j++ )
C[j] = C[j-1] + B[j][1];
for ( int i = 1; i < N-1; i++ )
{
for ( int j = i+1; j < N; j++ )
{
int k = j+1;
while ( P[j] == P[k] && k <= N ) k += 1;
B[i][j] += C[N] - C[k-1];
}
C[0] = 0;
for ( int j = i+1; j <= N; j++ )
{
C[j] = C[j-1] + B[j][i];
}
}
unsigned t=0;
for ( int i = 1; i < N; i++ )
for ( int j = i+1; j <= N; j++ )
t += B[i][j];
printf("%u", t);
}
void Qsort(int st, int dr)
{
int i = st-1, j = dr+1;
int pivot = P[st];
while ( i <= j )
{
do { i++; } while ( P[i] < pivot );
do { j--; } while ( P[j] > pivot );
if ( i <= j )
{
int aux;
aux = P[i], P[i] = P[j], P[j] = aux;
}
}
if ( st < j ) Qsort(st,j);
if ( i < dr ) Qsort(i,dr);
}