Cod sursa(job #2737417)

Utilizator bogdi1bogdan bancuta bogdi1 Data 4 aprilie 2021 18:49:38
Problema P-sir Scor 30
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <map>
using namespace std;
const long long mod = (1LL<<32);
map<long long, long long> mp;
long long v[2005];
long long sp[2005][2005];
int main()
{   freopen("psir.in", "r", stdin);
    freopen("psir.out", "w", stdout);
    int n,i,nr,j;
    long long aux,sol=0;
    scanf("%d", &n);
    for(i=1; i<=n; i++){
        scanf("%lld", &v[i]);
        mp[v[i]];
    }
    map<long long, long long>::iterator it;
    for(i=1, it=mp.begin(); it!=mp.end(); it++,i++)
        it->second=i;
    nr=i-1;
    for(i=1; i<=n; i++)
        v[i]=mp[v[i]];
    for(i=1; i<=n; i++){
        for(j=1; j<i; j++){
            aux=1;
            if(v[i]<v[j])
                aux=(aux+sp[j][v[i]-1])%mod;
            else
                if(v[i]>v[j])
                    aux=(aux+sp[j][nr]-sp[j][v[i]])%mod;
            sol=(sol+aux)%mod;
            sp[i][v[j]]=(sp[i][v[j]]+aux)%mod;
        }
        for(j=1; j<=nr; j++)
            sp[i][j]=(sp[i][j]+sp[i][j-1])%mod;
    }
    printf("%lld\n", sol);
    return 0;
}