Pagini recente » Cod sursa (job #2254815) | Cod sursa (job #1535523) | Cod sursa (job #3225178) | Cod sursa (job #2757144) | Cod sursa (job #786253)
Cod sursa(job #786253)
#include <fstream>
#include <algorithm>
using namespace std;
const int Maxn=2010;
const int Start=2048;
ifstream F("psir.in");
ofstream G("psir.out");
int N,V[Maxn],S[Maxn];
unsigned int D[Maxn][Maxn];
inline int Search(int val)
{
int i=1;
for(int s=Start;s;s>>=1)
if( i+s <= S[0] )
if ( S[i+s]<=val )
i=i+s;
return i;
}
int main()
{
F>>N;
for(int i=1;i<=N;++i)
{
F>>V[i];
S[i]=V[i];
}
sort(S+1,S+1+N);
S[0]=1;
for(int i=2;i<=N;++i)
if(S[i]!=S[S[0]])
S[++S[0]]=S[i];
for(int i=1;i<=N;++i)
V[i]=Search(V[i]);
unsigned int Sol=0;
for (int i=2;i<=N;++i)
{
for (int j=1;j<i;++j)
{
unsigned int Act=1;
if( V[i]<V[j] )
Act+=D[j][V[i]-1];
else
if( V[i]>V[j] )
Act+=D[j][S[0]]-D[j][V[i]];
D[i][V[j]]+=Act;
Sol+=Act;
}
for(int j=1;j<=S[0];++j)
D[i][j]+=D[i][j-1];
}
G<<Sol<<'\n';
}