Cod sursa(job #551334)

Utilizator DraStiKDragos Oprica DraStiK Data 10 martie 2011 17:25:08
Problema P-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <algorithm>
#include <vector>
using namespace std;

#define pb push_back

#define DIM 2005

unsigned int bst[DIM][DIM];
unsigned int nrt;
vector <int> tmp;
int v[DIM];
int N;

void read ()
{
    int i;

    scanf ("%d",&N);
    for (i=1; i<=N; ++i)
    {
        scanf ("%d",&v[i]);
        tmp.pb (v[i]);
    }
}

void solve ()
{
    int i,j;

    sort (tmp.begin (),tmp.end ());
    tmp.erase (unique (tmp.begin (),tmp.end ()),tmp.end ());
    for (i=1; i<=N; ++i)
        v[i]=lower_bound (tmp.begin (),tmp.end (),v[i])-tmp.begin ()+1;

    for (i=1; i<=N; ++i)
    {
        for (j=1; j<i; ++j)
        {
            ++bst[i][v[j]];
            if (v[i]>v[j])
                bst[i][v[j]]+=bst[j][N]-bst[j][v[i]];
            if (v[i]<v[j])
                bst[i][v[j]]+=bst[j][v[i]-1];
        }
        for (j=2; j<=N; ++j)
            bst[i][j]+=bst[i][j-1];
    }

    for (i=1; i<=N; ++i)
        nrt+=bst[i][N];
    printf ("%u",nrt);
}

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

    read ();
    solve ();

    return 0;
}