Pagini recente » Cod sursa (job #728110) | Cod sursa (job #2298236) | Cod sursa (job #2802959) | Cod sursa (job #3179329) | Cod sursa (job #1658887)
#include <bits/stdc++.h>
#define Nmax 2005
#define MOD (1u<<32)
using namespace std;
struct el
{
int val,poz;
bool operator <(const el &A) const
{
return val<A.val;
}
} v[Nmax];
unsigned int a[Nmax],sum[Nmax][Nmax],n,maxx;
inline void Normalize()
{
sort(v+1,v+n+1);
a[v[1].poz]=1;
for(int i=2;i<=n;++i)
{
a[v[i].poz]=a[v[i-1].poz];
if(v[i].val>v[i-1].val) ++a[v[i].poz];
}
maxx=a[v[n].poz];
}
int main()
{
int sol=0,i,j;
ifstream cin("psir.in");
ofstream cout("psir.out");
cin>>n;
for(i=1;i<=n;++i)
{
cin>>v[i].val;
v[i].poz=i;
}
Normalize();
for(i=2;i<=n;++i)
{
for(j=i-1;j;--j)
{
int val;
if(a[i]==a[j]) val=0;
else
if(a[i]>a[j])
{
val=sum[j][maxx]-sum[j][a[i]];
if(val<0) val+=MOD;
}
else val=sum[j][a[i]-1];
sol+=val+1;
if(sol>=MOD) sol-=MOD;
sum[i][a[j]]+=val+1;
if(sum[i][a[j]]>=MOD) sum[i][a[j]]-=MOD;
}
for(j=2;j<=maxx;++j)
{
sum[i][j]+=sum[i][j-1];
if(sum[i][j]>=MOD) sum[i][j]-=MOD;
}
}
cout<<sol<<"\n";
return 0;
}