Pagini recente » Cod sursa (job #1847725) | Cod sursa (job #1620246) | Cod sursa (job #486890) | Cod sursa (job #2224951) | Cod sursa (job #86683)
Cod sursa(job #86683)
#include <cstdio>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
#define fin "psir.in"
#define fout "psir.out"
#define Nmax 2001
vector <int> v,a;
map <int,int> H;
int N;
unsigned int ret,dp[Nmax][Nmax];
void readdata()
{
int i,tmp;
freopen(fin,"r",stdin);
scanf("%d",&N);
for (i=0;i<N;++i)
{
scanf("%d",&tmp);
v.push_back(tmp);
a.push_back(tmp);
}
}
void norm()
{
int i,tmp;
sort(a.begin(),a.end());
tmp=0;
for (i=0;i<N;++i)
if (!H[a[i]])
H[a[i]]=++tmp;
for (i=0;i<N;++i)
v[i]=H[v[i]];
}
void solve()
{
int i,j;
norm();
for (i=0;i<N;++i)
{
for (j=0;j<i;++j)
{
dp[i][v[j]]++;
if ( v[j] < v[i] )
dp[i][v[j]]+=( dp[j][N] - dp[j][v[i]] );
if ( v[j] > v[i] )
dp[i][v[j]]+= dp[j][v[i]-1] ;
}
for (j=1;j<=N;++j)
dp[i][j]+=dp[i][j-1];
ret += dp[i][N];
}
}
void printdata()
{
freopen(fout,"w",stdout);
printf("%u\n",ret);
}
int main()
{
readdata();
solve();
printdata();
return 0;
}