Cod sursa(job #1947299)

Utilizator LucianTLucian Trepteanu LucianT Data 30 martie 2017 21:33:35
Problema P-sir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
#define maxN 2004
using namespace std;
map<int,int> Map;
int n,i,j,curr,v[maxN],a[maxN];
unsigned int sol,dp[maxN][maxN];
int main()
{
    freopen("psir.in","r",stdin);
    freopen("psir.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
        a[i]=v[i];
    }

    sort(a+1,a+n+1);
    for(i=1;i<=n;i++)
    {
        if(i>1 && a[i]==a[i-1])
            continue;
        Map[a[i]]=++curr;
    }
    for(i=1;i<=n;i++)
        v[i]=Map[v[i]];

    for(i=2;i<=n;i++)
    {
        for(j=1;j<i;j++)
        {
            unsigned int curr_val=1;
            if(v[j]<v[i])
                curr_val+=dp[j][v[i]-1];
            else if(v[j]>v[i])
                curr_val+=dp[j][curr]-dp[j][v[i]];

            dp[i][v[j]]+=curr_val;
            sol+=curr_val;
        }
        for(j=2;j<=curr;j++)
            dp[i][j]+=dp[i][j-1];
    }

    printf("%u",sol);
    return 0;
}