Cod sursa(job #2129157)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 12 februarie 2018 16:23:47
Problema P-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int v[2001],w[2001];
unsigned int d[2001][2001];
int main()
{
    FILE *fin=fopen ("psir.in","r");
    FILE *fout=fopen ("psir.out","w");
    int n,i,elem,j;
    unsigned int sol=0;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++){
        fscanf (fin,"%d",&v[i]);
        w[i]=v[i];
    }
    sort (w+1,w+n+1);
    // normalizare
    elem=0;
    for (i=1;i<=n;i++){
        if (w[elem]!=w[i])
            w[++elem]=w[i];
    }
    for (i=1;i<=n;i++){
        for (j=1;j<=elem;j++){
            if (v[i]==w[j]){
                v[i]=j;
                break;
            }
        }
    }
    for (i=2;i<=n;i++){
        for (j=i-1;j>0;j--){
            if (v[i]==v[j]){
                d[i][v[j]]=(d[i][v[j]]+1);
            }
            else if (v[i]<v[j]){
                // caut v[k]<v[i]
                d[i][v[j]]=(1+d[i][v[j]]+d[j][v[i]-1]);
            }
            else {
                d[i][v[j]]=(1+d[i][v[j]]+(d[j][elem]-d[j][v[i]]));
            }
        }
        for (j=1;j<=elem;j++){
            sol+=d[i][j];
            d[i][j]=(d[i][j]+d[i][j-1]);
        }
    }
    fprintf (fout,"%u",sol);
}