Cod sursa(job #463593)

Utilizator GotenAmza Catalin Goten Data 16 iunie 2010 15:45:00
Problema P-sir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
using namespace std;
unsigned int h[2010],b[2010],a[2010],m[2010][2010],temp[2010],sum[2010],res;
int cmp(int i, int j)
{
	return a[i]<a[j];
}
int main()
{
	int i,j,n,nr=0,t,u;
	ifstream read ("psir.in");
	ofstream write ("psir.out");
	read>>n;
	for(i=1;i<=n;++i)
	{
		read>>a[i];
		h[i]=i;
	}
	sort(h+1,h+n+1,cmp);
	i=1;
	while(i<=n)
	{
		++nr;
		j=i;
		while(a[h[i]]==a[h[i+1]])
			++i;
		for(int t=j;t<=i;++t)
			b[h[t]]=nr;
		++i;
	}
	for(i=2;i<=n;++i)
	{
		for(j=1;j<=n;++j)
			temp[j]=0;
		for(j=1;j<i;++j)
		{
			if(a[j]>a[i])
				temp[j]=m[j][b[i]-1];
			else
				if(b[j]<b[i])
					temp[j]=sum[j]-m[j][b[i]];
			++temp[j];
			sum[i]+=temp[j];
		}
		t=1;
		for(j=i+1;j<=n;++j)
		{
			m[i][j]=m[i][j-1];
			while(t<=n&&b[h[t]]==j)
			{
				if(h[t]<i)
					m[i][j]+=temp[h[t]];
				++t;
			}
		}
		res+=sum[i];
	}
	write<<res<<'\n';
	return 0;
}