Pagini recente » Cod sursa (job #617865) | Cod sursa (job #121423) | Cod sursa (job #1791822) | Cod sursa (job #591211) | Cod sursa (job #582224)
Cod sursa(job #582224)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const char iname[] = "psir.in";
const char oname[] = "psir.out";
ifstream f(iname);
ofstream g(oname);
int main() {
int N; f >> N;
vector<int> v(N), un(N);
for (int i = 0; i < N; ++i)
f >> v[i], un[i] = v[i];
sort(un.begin(), un.end());
un.resize(unique(un.begin(), un.end()) - un.begin());
int K = un.size();
for (int i = 0; i < N; ++i)
v[i] = lower_bound(un.begin(), un.end(), v[i]) - un.begin();
vector< vector<unsigned int> > dp(N, vector<unsigned int>(K, 0u));
unsigned int answer(0u);
for (int i = 1; i < N; ++i) {
for (int j = 0; j < i; ++j) {
if (v[j] < v[i])
dp[i][v[j]] += dp[j][K - 1] - dp[j][v[i]];
if (v[j] > v[i] && v[i] != 0)
dp[i][v[j]] += dp[j][v[i] - 1];
++dp[i][v[j]];
}
for (int j = 1; j < K; ++j)
dp[i][j] += dp[i][j - 1];
answer += dp[i][K - 1];
}
g << answer << "\n";
}