Pagini recente » Cod sursa (job #1296893) | Cod sursa (job #118510) | Cod sursa (job #2117949) | Cod sursa (job #1129090) | Cod sursa (job #2759791)
#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][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){
for (int k = j - 1; k >= 1; --k){
sum[fr[v[k]]][j] += dp[k][j];
}
for (int i = 1; i <= z; ++i){
sum[i][j] += sum[i - 1][j];
}
for (int i = j + 1; i <= n; ++i){
dp[j][i] = 1;
if (v[j] < v[i]){
dp[j][i] += (sum[z][j] - sum[fr[v[i]]][j]);
}
else if (v[j] > v[i]){
dp[j][i] += sum[fr[v[i]] - 1][j];
}
ans += dp[j][i];
}
}
fout << ans;
return 0;
}