Cod sursa(job #1025117)

Utilizator florin.elfusFlorin Elfus florin.elfus Data 9 noiembrie 2013 15:31:24
Problema P-sir Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <map>
#include <algorithm>

using namespace std;

int x[2048], y[2048];
map <int, int> M;
unsigned dp[2048][2048];

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

    int N;
    scanf("%d", &N);
    for (int i = 1; i <= N; ++i) {
        scanf("%d", &x[i]);
        y[i] = x[i];
    }

    sort(y + 1, y + N + 1);
    int uq = 0;
    for (int i = 1; i <= N; ++i)
        if (i == 1 || y[i] != y[i - 1])
            M[y[i]] = ++uq;
    for (int i = 1; i <= N; ++i)
        x[i] = M[x[i]];

    unsigned sol = 0;
    for (int j = 2; j <= N; ++j) {
        for (int i = 1; i < j; ++i) {
            ++dp[x[i]][j];
            if (x[i] < x[j])
                dp[x[i]][j] += dp[uq][i] - dp[x[j]][i];
            if (x[i] > x[j])
                dp[x[i]][j] += dp[x[j] - 1][i];
        }
        for (int i = 1; i <= uq; ++i) {
            sol += dp[i][j];
            dp[i][j] += dp[i - 1][j];
        }
    }

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