Pagini recente » Cod sursa (job #2876918) | Cod sursa (job #394825) | Cod sursa (job #868446) | Cod sursa (job #1505319) | Cod sursa (job #2974949)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("psir.in");
ofstream fout("psir.out");
const long long mod=(1LL<<32);
int n;
int p[2005];
int ps[2005];
unsigned int dp[2005][2005];
int fr[2005];
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
{
fin>>p[i];
ps[i]=p[i];
}
sort(ps+1,ps+n+1);
for(int i=1; i<=n; i++)
{
int st=1,dr=n,mij,pos;
while(st<=dr)
{
mij=(st+dr)/2;
if(ps[mij]==p[i])
{
pos=mij;
break;
}
if(ps[mij]<p[i])
st=mij+1;
else
dr=mij-1;
}
p[i]=pos;
}
unsigned int ans=0;
for(int i=1; i<=n; i++)
{
ans=(ans+fr[p[i]])%mod;
fr[p[i]]++;
}
for(int i=1; i<=n; i++)
{
int x=p[i];
unsigned int sum=1;
for(int j=1; j+1<x; j++)
{
dp[x][j]=(dp[x][j]+sum)%mod;
sum=(sum+dp[j][x])%mod;
}
dp[x][x-1]=(dp[x][x-1]+sum)%mod;
sum=1;
for(int j=n; j-1>x; j--)
{
dp[x][j]=(dp[x][j]+sum)%mod;
sum=(sum+dp[j][x])%mod;
}
dp[x][x+1]=(dp[x][x+1]+sum)%mod;
for(int j=1; j<=n; j++)
ans=(ans+dp[j][x])%mod;
}
fout<<ans<<"\n";
return 0;
}