Cod sursa(job #786253)

Utilizator danalex97Dan H Alexandru danalex97 Data 10 septembrie 2012 19:22:07
Problema P-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <algorithm>

using namespace std;

const int Maxn=2010;
const int Start=2048;

ifstream F("psir.in");
ofstream G("psir.out");

int N,V[Maxn],S[Maxn];
unsigned int D[Maxn][Maxn];

inline int Search(int val)
{
	int i=1;
	for(int s=Start;s;s>>=1)
		if( i+s <= S[0] )
			if ( S[i+s]<=val )
				i=i+s;
	return i;
}

int main()
{
	F>>N;
	for(int i=1;i<=N;++i)
	{
		F>>V[i];
		S[i]=V[i];
	}

	sort(S+1,S+1+N);
	
	S[0]=1;
	for(int i=2;i<=N;++i)
		if(S[i]!=S[S[0]])
			S[++S[0]]=S[i];

	for(int i=1;i<=N;++i)
		V[i]=Search(V[i]);

	unsigned int Sol=0;
	for (int i=2;i<=N;++i)
	{ 
		for (int j=1;j<i;++j)
		{
			unsigned int Act=1;
			if( V[i]<V[j] )
				Act+=D[j][V[i]-1];
			else
				if( V[i]>V[j] )
					Act+=D[j][S[0]]-D[j][V[i]];
			D[i][V[j]]+=Act;
			Sol+=Act;
		}
		
		for(int j=1;j<=S[0];++j)
			D[i][j]+=D[i][j-1];
	}

	G<<Sol<<'\n';
}