Cod sursa(job #67781)

Utilizator sealTudose Vlad seal Data 25 iunie 2007 14:04:58
Problema P-sir Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda Finala, Clasele 11-12 Marime 1.01 kb
#include<stdio.h>
#define Nm 2001
int P[Nm],n;

void read()
{
    int i;

    freopen("psir.in","r",stdin);
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",P+i);
}

unsigned solve()
{
    int i,j;
    unsigned Nr[Nm],A[Nm],B[Nm],Mod=4294967295u;

    Nr[1]=0;
    for(i=2;i<=n;++i)
    {
        Nr[i]=((long long)Nr[i-1]+i-1)&Mod;
        A[0]=B[0]=0;
        for(j=1;j<i;++j)
        {
            A[j]=A[j-1]; B[j]=B[j-1];
            if(P[j]<P[i])
            {
                A[j]=((long long)A[j]+Nr[j]+1)&Mod;
                Nr[i]=((long long)Nr[i]+B[j-1])&Mod;
            }
            else
                if(P[j]>P[i])
                {
                    B[j]=((long long)B[j]+Nr[j]+1)&Mod;
                    Nr[i]=((long long)Nr[i]+A[j-1])&Mod;
                }
        }
    }
    return Nr[n];
}

void write(unsigned s)
{
    freopen("psir.out","w",stdout);
    printf("%u\n",s);
}

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