Cod sursa(job #613506)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 28 septembrie 2011 17:32:26
Problema P-sir Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

#define maxn 2010

int n, lm, i, s, j, k;
unsigned int sol, d[maxn][maxn];
int v[maxn];
vector<int> nm;

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

    scanf("%d", &n);
    for(int i=1; i<=n; ++i)
    {
        scanf("%d", &v[i]);
        nm.push_back(v[i]);
    }

    sort(nm.begin(), nm.end());
    vector<int> :: iterator it=unique(nm.begin(), nm.end());
    nm.resize(it-nm.begin());

    for(int i=1; i<=n; ++i)
        v[i]=int(lower_bound(nm.begin(), nm.end(), v[i])-nm.begin())+1;

    int s=nm.size();

    for(int i=1; i<=n; ++i)
    {
        for(int j=1; j<i; ++j)
        {
            if(v[j]<v[i])
                d[i][v[j]]+=d[j][s]-d[j][v[i]];
            else
                d[i][v[j]]+=d[j][v[i]-1];
            ++d[i][v[j]];
        }
        for(int j=1; j<=s; ++j)
            d[i][j]+=d[i][j-1];
        sol+=d[i][s];
    }

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

    return 0;
}