Cod sursa(job #86683)

Utilizator Binary_FireFlorin Pg Binary_Fire Data 25 septembrie 2007 11:52:49
Problema P-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>
#include <algorithm>
#include <map>
#include <vector>

using namespace std;

#define fin  "psir.in"
#define fout "psir.out"
#define Nmax 2001

vector <int> v,a;
map <int,int> H;
int N;
unsigned int ret,dp[Nmax][Nmax];

void readdata()
{
     int i,tmp;
     
     freopen(fin,"r",stdin);
     
     scanf("%d",&N);
     for (i=0;i<N;++i)
     {
         scanf("%d",&tmp);
         v.push_back(tmp);
         a.push_back(tmp);    
     } 
}

void norm()
{
     int i,tmp;
     
     sort(a.begin(),a.end());
     tmp=0;
     for (i=0;i<N;++i)
         if (!H[a[i]])
            H[a[i]]=++tmp;
     for (i=0;i<N;++i)
         v[i]=H[v[i]];
}

void solve()
{
     int i,j;
     
     norm();
     
     for (i=0;i<N;++i)
     {
         for (j=0;j<i;++j)
         {
             dp[i][v[j]]++;
             if ( v[j] < v[i] )
                dp[i][v[j]]+=( dp[j][N] - dp[j][v[i]] );
             if ( v[j] > v[i] )
                dp[i][v[j]]+= dp[j][v[i]-1] ;    
         }
         for (j=1;j<=N;++j)
             dp[i][j]+=dp[i][j-1];
         ret += dp[i][N];
     }
}
     
void printdata()
{
     freopen(fout,"w",stdout);
     printf("%u\n",ret);     
}
     
int main()
{
    readdata();
    solve();
    printdata();
    return 0;
}