Pagini recente » Cod sursa (job #2841333) | Cod sursa (job #1266543) | Cod sursa (job #2175983) | Cod sursa (job #3040963) | Cod sursa (job #71295)
Cod sursa(job #71295)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
#define pb push_back
#define sz size()
#define all(v) (v).begin(), (v).end()
#define Nmax 2048
int n;
int v[Nmax];
unsigned int c[Nmax][Nmax];
unsigned int ret;
map<int, int> H;
int Label[Nmax];
void readdata()
{
freopen("psir.in", "r", stdin);
freopen("psir.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &v[i]);
}
void normalizeaza()
{
int i;
vector<int> u;
for (i = 1; i <= n; ++i)
u.pb(v[i]);
sort(all(u));
u.resize( unique(all(u)) - u.begin() );
for (i = 0; i < (int)u.sz; ++i)
H[ u[i] ] = i+1;
for (i = 1; i <= n; ++i)
Label[i] = H[ v[i] ];
}
void solve()
{
int i, j;
normalizeaza();
for (i = 2; i <= n; ++i)
{
for (j = 1; j < i; ++j)
{
c[i][ Label[j] ]++;
if (v[i] < v[j])
c[i][ Label[j] ] += c[j][ Label[i]-1 ];
if (v[i] > v[j])
c[i][ Label[j] ] += c[j][ H.sz ] - c[j][ Label[i] ];
}
for (j = 1; j <= H.sz; ++j)
ret += c[i][j];
for (j = 2; j <= H.sz; ++j)
c[i][j] += c[i][j-1];
}
printf("%d\n", ret);
}
int main()
{
readdata();
solve();
return 0;
}