Cod sursa(job #3225017)

Utilizator Botnaru_VictorBotnaru Victor Botnaru_Victor Data 16 aprilie 2024 19:58:07
Problema P-sir Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <map>
using namespace std;

///----------TOGGLES
#define FIO
//#define TESTS

///---------
#define int uint32_t

#ifdef FIO
    const string fname="psir";
    ifstream in(fname+".in");
    ofstream out(fname+".out");
    #define cin in
    #define cout out
#endif // FIO

///--------

#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

const int maxn = 2005;

int dmic[maxn][maxn];
int v[maxn];
int n;
void solve()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>v[i];

    int maxval=0;
    {
        map<int,int> nor;
        for(int i=1;i<=n;i++) nor[v[i]]=0;
        for(auto &e:nor)
        {
            e.second=++maxval;
        }
        for(int i=1;i<=n;i++) v[i]=nor[v[i]];
    }

    int ans=0;
    for(int i=1;i<=n;i++)
    {
        //dmic[i][0]=1;
        for(int j=i-1;j>=1;j--)
        {
            if(v[j]>v[i])  dmic[i][v[j]]+=dmic[j][v[i]-1]+1;
            else if(v[j]<v[i]) dmic[i][v[j]]+=dmic[j][maxval] - dmic[j][v[i]]+1;
            else ans=ans+1;
        }
        for(int j=1;j<=maxval;j++)
        {
            dmic[i][j]=(dmic[i][j]+dmic[i][j-1]);
        }
        ans=(ans+dmic[i][maxval]);
    }

    /*for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=maxval;j++)
        {
            cout<<dmic[i][j]<<' ';
        }
        cout<<'\n';
    }*/

    cout<<ans<<'\n';
}

///---MAIN FUNC-------

int32_t main()
{
    IOS;
    solve();
    return 0;
}