Pagini recente » Cod sursa (job #1637392) | Cod sursa (job #2899291) | Cod sursa (job #306510) | Cod sursa (job #1821469) | Cod sursa (job #67514)
Cod sursa(job #67514)
// MOD!!!
/*
Complexitate: O(N^2)
*/
#include <cstdio>
#include <algorithm>
using namespace std;
#define NMAX 2002
#define MOD 4294967295
int N,val[NMAX];
short int ord[NMAX];
unsigned int A[NMAX][NMAX];
unsigned int B[NMAX],C[NMAX];
short int sch[NMAX];
void read_data()
{
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d",&val[i]);
ord[i]=i;
}
}
bool cmp(short int a, short int b)
{
return val[a]<val[b];
}
void solve()
{
int i,j,k;
for(i=0;i<N;i++)
{
// init
for(k=0;k<N;k++)
B[k]=C[k]=A[ord[k]][i];
for(k=1;k<N;k++)
B[k]+=B[k-1];
for(k=N-2;k>=0;k--)
C[k]+=C[k+1];
// solve
for(j=0;j<=i;j++)
A[i][j]=0;
for(j=i+1;j<N;j++)
if(val[i]<val[j])
{
k=sch[j]+1;
if(k<N)
A[i][j]=1+C[k];
else
A[i][j]=1;
}
else
if(val[i]>val[j])
{
k=sch[j]-1;
if(k>=0)
A[i][j]=1+B[k];
else
A[i][j]=1;
}
else
A[i][j]=1;
}
}
int main()
{
freopen("psir.in","r",stdin);
freopen("psir.out","w",stdout);
read_data();
sort(ord,ord+N,cmp);
for(int i=0;i<N;i++)
sch[ord[i]]=i;
solve();
unsigned int cnt=0;
for(int i=0;i<N;i++)
for(int j=i+1;j<N;j++)
cnt+=A[i][j];
printf("%u\n",cnt);
return 0;
}