Cod sursa(job #1525082)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 14 noiembrie 2015 18:43:48
Problema P-sir Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <algorithm>

#define DIM (2000 + 5)

using namespace std;

ifstream fin("psir.in");
ofstream fout("psir.out");

int n;

struct data{

    int x;
    int y;

}v[DIM];

int partialSum[DIM][DIM];

bool cmp(const data &a, const data &b) {

    return a.x < b.x;

}

bool cmp2(const data &a, const data &b) {

    return a.y < b.y;

}

int main() {

    fin >> n;

    for (int i = 1; i <= n; i++) {

        fin >> v[i].x;

        v[i].y = i;

    }

    sort(v + 1, v + n + 1, cmp);

    int crt = 1;

    v[1].x = 1;

    for (int i = 2; i <= n; i++) {

        if(v[i].x != v[i - 1].x)
            crt++;

        v[i].x = crt;

    }

    sort(v + 1, v + n + 1, cmp2);

    int solution = 0;

    for (int i = 2; i <= n; ++i) {

        for (int j = 1; j < i; ++j) {

            int x = 1;

            if (v[i].x < v[j].x)
                x += partialSum[j][v[i].x - 1];
            else if (v[i].x > v[j].x)
                x += partialSum[j][crt] - partialSum[j][v[i].x];

            partialSum[i][v[j].x] += x;
            solution += x;

        }

        for (int j = 1; j <= crt; ++j)
            partialSum[i][j] += partialSum[i][j - 1];

    }

    fout << solution << "\n";

    return 0;

}

//Miriam e tare!