Cod sursa(job #2984833)

Utilizator oskar01oskar the boss oskar01 Data 24 februarie 2023 23:25:27
Problema P-sir Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <vector>
#include <map>

using namespace std;

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

const int MAX = 2*1e3+3;

int n;
vector<int> v;
vector<vector<uint32_t>> dp;
map<int,int> norm;

void read() {
    cin>>n;
    v.resize(n+1);
    for(int i=1;i<=n;i++) {
        cin>>v[i];
        norm[v[i]]=i;
    }
    int cnt=1;
    for(auto& it:norm) {
        it.second=cnt++;
    }
    for(int i=1;i<=n;i++) {
        v[i]=norm[v[i]];
    }
}

void solve() {
    dp.resize(MAX+3,vector<uint32_t>(MAX+3));
    uint32_t res=0;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<i;j++) {
            int cnt=1;
            if(v[ i ] > v[ j ]) {
                cnt += dp[j][MAX]-dp[j][v[i]];
            }
            else if(v[ i ] < v[ j ]){
                cnt += dp[j][v[i]-1];
            }
            dp[i][v[j]]+=cnt;
        }
        for(int x=1;x<=MAX;x++) {
            res+=dp[i][x];
            dp[i][x]+=dp[i][x-1];
        }
    }
    cout<<res;
}

int main() {
 
    read();
    solve();
    return 0;
}