Pagini recente » Cod sursa (job #109892) | Monitorul de evaluare | Cod sursa (job #2008524) | Cod sursa (job #3258364) | Cod sursa (job #1742556)
#include <fstream>
#include <algorithm>
#include <unordered_map>
using namespace std;
ifstream cin("psir.in");
ofstream cout("psir.out");
const int MAXN = 2000;
unsigned int v[1 + MAXN], sorted[1 + MAXN];
unsigned int sum[1 + MAXN][1 + MAXN];
unordered_map<unsigned int, unsigned int> Map;
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> v[i];
sorted[i] = v[i];
}
sort(sorted + 1, sorted + n + 1);
int distinct = 0;
for (int i = 1; i <= n; i++) {
if (i > 1 && sorted[i] == sorted[i - 1])
continue;
distinct++;
Map[sorted[i]] = distinct;
}
for (int i = 1; i <= n; i++)
v[i] = Map[v[i]];
unsigned int answer = 0;
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
unsigned int add;
if (v[i] < v[j])
add = 1 + sum[j][v[i] - 1];
if (v[i] > v[j])
add = 1 + sum[j][distinct] - sum[j][v[i]];
if (v[i] == v[j])
add = 1;
sum[i][v[j]] += add;
answer += add;
}
for (int j = 2; j <= distinct; j++)
sum[i][j] += sum[i][j - 1];
}
cout << answer;
return 0;
}