Pagini recente » Cod sursa (job #1329226) | Cod sursa (job #2088673) | Cod sursa (job #2439104) | Cod sursa (job #2548798) | Cod sursa (job #1025109)
#include <stdio.h>
#include <map>
#include <algorithm>
using namespace std;
int x[2048], y[2048];
map <int, int> M;
unsigned dp[2048][2048];
int main() {
freopen("psir.in", "r", stdin);
freopen("psir.out", "w", stdout);
int N;
scanf("%d", &N);
for (int i = 1; i <= N; ++i) {
scanf("%d", &x[i]);
y[i] = x[i];
}
sort(y + 1, y + N + 1);
int uq = 0;
for (int i = 1; i <= N; ++i)
if (i == 1 || y[i] != y[i - 1])
M[y[i]] = ++uq;
for (int i = 1; i <= N; ++i)
x[i] = M[x[i]];
unsigned sol = 0;
for (int j = 2; j <= N; ++j) {
for (int i = 1; i < j; ++i) {
++dp[x[i]][j];
if (x[i] < x[j])
dp[x[i]][j] += dp[uq][i] - dp[x[j]][i];
if (x[i] > x[j])
dp[x[i]][j] += dp[x[j] - 1][i];
}
for (int i = 1; i <= uq; ++i) {
sol += dp[i][j];
dp[i][j] += dp[i - 1][j];
}
}
printf("%u", sol);
return 0;
}