Cod sursa(job #582224)

Utilizator freak93Adrian Budau freak93 Data 15 aprilie 2011 02:39:42
Problema P-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#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";
}