Cod sursa(job #2500435)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 27 noiembrie 2019 22:26:36
Problema P-sir Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <map>
using namespace std;
const int NMAX = 2005;
int v[NMAX];
map <int, int> mp;
int sp[NMAX][NMAX];

int main() {
    int n;
    freopen("psir.in", "r", stdin);
    freopen("psir.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) {
        scanf("%d", &v[i]);
        mp[v[i]] = 0;
    }
    int lim = 0;
    for(auto &it : mp) {
        lim++;
        it.second = lim;
    }
    for(int i = 1; i <= n; i++) {
        v[i] = mp[v[i]];
    }
    int sol = 0;
    for(int i = 2; i <= n; i++) {
        for(int j = 1; j < i; j++) {
            int nr = 0;
            if(v[i] == v[j]) {
                sol++;
                sp[i][v[j]]++;
            }
            else if(v[i] > v[j]) {
                nr = sp[j][lim] - sp[j][v[i]] + 1;
            }
            else if (v[i] < v[j]) {
                nr = sp[j][v[i] - 1] + 1;
            }
            sol += nr;
            sp[i][v[j]] += nr;
        }
        for(int j = 2; j <= lim; j++) {
            sp[i][j] += sp[i][j - 1];
        }
    }
    printf("%d\n", sol);
    return 0;
}