Cod sursa(job #1524103)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 13 noiembrie 2015 15:59:25
Problema P-sir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <unordered_map>

#define infile "psir.in"
#define outfile "psir.out"

using namespace std;

unsigned int v[2005], w[2005];
unsigned int partSum[2005][2005];

unordered_map<unsigned int, unsigned int> map;

int main() {

	ifstream fin(infile);
	ofstream fout(outfile);

	int n;

	fin >> n;

	for (int i = 1; i <= n; ++i) {

		fin >> v[i];
		w[i] = v[i];

	}

	sort(w + 1, w + n + 1);

	int cnt = 0;

	for (int i = 1; i <= n; ++i) {

		if (i > 1 && w[i] == w[i - 1])
			continue;

		++cnt;
		map[w[i]] = cnt;

	}

	for (int i = 1; i <= n; ++i)
		v[i] = map[v[i]];

	unsigned int sol = 0;
	for (int i = 2; i <= n; ++i) {

		unsigned int temp = 1;

		for (int j = 1; j < i; ++j) {

			if (v[i] < v[j]) {
				temp += partSum[j][v[i] - 1];
			}
			else if (v[i] > v[j]) {
				temp += partSum[j][cnt] - partSum[j][v[i]];
			}

			partSum[i][v[j]] += temp;
			sol += temp;

		}

		for (int j = 2; j <= cnt; ++j)
			partSum[i][j] += partSum[i][j - 1];

	}

	fout << sol;

	return 0;

}

//Trust me, I'm the Doctor!