Pagini recente » Cod sursa (job #1748816) | Cod sursa (job #842954) | Cod sursa (job #3204551) | Cod sursa (job #2107812) | Cod sursa (job #67725)
Cod sursa(job #67725)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 2048
#define mp make_pair
#define x first
#define y second
int n;
int sir[Nmax], d[Nmax];
unsigned int s[Nmax][Nmax];
pair<int, int> p[Nmax];
unsigned int sol;
void citire()
{
int i;
scanf("%d\n", &n);
for (i = 1; i <= n; ++i)
scanf("%d", &sir[i]);
}
void solve()
{
int i, j, cnt;
long long tmp;
for (i = 1; i <= n; ++i)
d[i] = 1;
for (i = 1; i <= n; ++i)
p[i] = mp(sir[i], i);
sort(p+1, p+n+1);
sir[p[1].y] = cnt = 1;
for (i = 2; i <= n; ++i)
{
if (p[i].x != p[i - 1].x) ++cnt;
sir[p[i].y] = cnt;
}
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n + 1; ++j)
s[i][j] += s[i][j - 1];
for (j = i + 1; j <= n; ++j)
{
++sol;
++s[j][sir[i]];
if (sir[i] > sir[j])
{
s[j][sir[i]] += s[i][sir[j] - 1];
sol += s[i][sir[j] - 1];
}
if (sir[i] < sir[j])
{
s[j][sir[i]] += s[i][n + 1] - s[i][sir[j]];
sol += s[i][n + 1] - s[i][sir[j]];
}
}
}
tmp = sol;
printf("%lld\n", tmp);
}
int main()
{
freopen("psir.in", "r", stdin);
freopen("psir.out", "w", stdout);
citire();
solve();
return 0;
}