Cod sursa(job #2042652)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 18 octombrie 2017 21:36:38
Problema P-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;

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

const int DIM = 2005;

vector<unsigned> aux;
unsigned arr[DIM], dp[DIM][DIM], ans;

int main(void)
{
    int n;
    in >> n;
    
    for (int i = 1; i <= n; ++i) {
        in >> arr[i];
        aux.push_back(arr[i]);
    }
    
    sort(aux.begin(), aux.end());
    aux.resize(unique(aux.begin(), aux.end()) - aux.begin());
    
    int m = (int) aux.size();
    for (int i = 1; i <= n; ++i) {
        arr[i] = (int) (lower_bound(aux.begin(), aux.end(), arr[i]) - aux.begin() + 1);
    
        for (int j = i - 1; j >= 1; --j) {
            ++dp[i][arr[j]];
            if (arr[i] == arr[j])
                continue;
            
            if (arr[i] > arr[j])
                dp[i][arr[j]] += dp[j][m] - dp[j][arr[i]];
            else
                dp[i][arr[j]] += dp[j][arr[i] - 1];
        }
        
        for (int j = 1; j <= m; ++j)
            dp[i][j] += dp[i][j - 1];
        ans += dp[i][m];
    }
    
    out << ans << endl;
    return 0;
}