Cod sursa(job #68235)

Utilizator gcosminGheorghe Cosmin gcosmin Data 27 iunie 2007 11:15:52
Problema P-sir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

#define NMAX 2010
#define uint unsigned int

int N;

int a[NMAX];
pair <int, int> b[NMAX];
int poz[NMAX];

uint din[NMAX][NMAX];

int main()
{
	int i, j;

	freopen("psir.in", "r", stdin);
	freopen("psir.out", "w", stdout);

	scanf("%d", &N);

	for (i = 1; i <= N; i++) {
		scanf("%d", &a[i]);

		b[i].first = a[i];
		b[i].second = i;
	}

	sort(b + 1, b + N + 1);

	for (i = 1; i <= N; i++) 
		if (i > 1 && b[i].first == b[i-1].first) poz[ b[i].second ] = poz[ b[i-1].second ];
		else poz[ b[i].second ] = i;

	int pi, pj;

	uint rez = 0;

	for (i = 2; i <= N; i++) {
		pi = poz[i];
		for (j = 1; j < i; j++) {
			pj = poz[j];

			if (a[j] < a[i]) din[i][pj] += din[j][N] - din[j][pi];

			if (a[j] > a[i]) din[i][pj] += din[j][pi - 1];

			if (a[j] != a[i]) din[i][pj]++;
			else rez++;
		}

		for (j = 1; j <= N; j++) din[i][j] += din[i][j-1];

		printf("%u\n", din[i][N]);

		rez += din[i][N];
	}

	printf("%u\n", rez);

fclose(stdin);
fclose(stdout);
return 0;
}