Cod sursa(job #571769)

Utilizator S7012MYPetru Trimbitas S7012MY Data 4 aprilie 2011 19:26:15
Problema P-sir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define DN 2005
#define ui unsigned int
using namespace std;

ui dp[DN][DN],v[DN],ind[DN],sf[DN],n;
vector<int> aux;

bool cmp(const int &a, const int &b) {
    return aux[a]<aux[b];
}

int main()
{
    ifstream f("psir.in");
    ofstream g("psir.out");
    f>>n;
    aux.push_back(1<<32);
    for(int i=1; i<=n; ++i) {
        f>>v[i];
        ind[i]=i;
        aux.push_back(v[i]);
    }
    aux.erase(unique(aux.begin(),aux.end()),aux.end());
    sort(ind+1,ind+n+1,cmp);
    for(int i=1; i<=n; ++i) {
        for(int j=1; j<i; ++j) {
            ++dp[i][ind[j]];
            if(ind[i]>ind[j]) dp[i][ind[j]]+=dp[j][n]-dp[j][ind[i]];
            else dp[i][ind[j]]+=dp[j][ind[i]-1];
        }
        for(int j=2; j<=n; ++j) dp[i][j]+=dp[i][j-1];
    }
    ui rez=0;
    for(int i=1; i<=n; ++i) rez+=dp[i][n];
    cout<<rez;
    g<<rez;
    return 0;
}