Pagini recente » Cod sursa (job #1842463) | Cod sursa (job #546336) | Cod sursa (job #2191810) | Cod sursa (job #2761510) | Cod sursa (job #2759788)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("psir.in");
ofstream fout("psir.out");
const int nmax = 2005;
int n, v[nmax];
unsigned int dp[nmax][nmax], ans, sum[nmax];
int main(){
fin >> n;
vector <int> norm;
for (int i = 1; i <= n; ++i){
fin >> v[i];
norm.push_back(v[i]);
}
sort(norm.begin(), norm.end());
unordered_map <int, int> fr;
int z = 1;
fr[norm[0]] = z;
for (int i = 1; i < norm.size(); ++i){
if (norm[i] != norm[i - 1]){
++z;
}
fr[norm[i]] = z;
}
for (int j = 1; j <= n; ++j){
memset(sum, 0, sizeof sum);
for (int k = j - 1; k >= 1; --k){
sum[fr[v[k]]] += dp[k][j];
}
for (int i = 1; i <= z; ++i){
sum[i] += sum[i - 1];
}
for (int i = j + 1; i <= n; ++i){
dp[j][i] = 1;
if (v[j] < v[i]){
dp[j][i] += (sum[z] - sum[fr[v[i]]]);
}
else if (v[j] > v[i]){
dp[j][i] += sum[fr[v[i]] - 1];
}
ans += dp[j][i];
}
}
fout << ans;
return 0;
}