Pagini recente » Cod sursa (job #204569) | Monitorul de evaluare | Cod sursa (job #83800) | Monitorul de evaluare | Cod sursa (job #73989)
Cod sursa(job #73989)
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define MAX_N 2048
int N, S[MAX_N], V[MAX_N];
unsigned A[MAX_N][MAX_N], res;
void solve(void)
{
int i, j;
for(i = 2; i <= N; i++)
{
for(j = i-1; j >= 1; j--)
{
if(S[i] == S[j])
continue ;
A[i][S[j]]++;
if(S[i] < S[j])
A[i][S[j]] += A[j][S[i]-1];
else
A[i][S[j]] += A[j][N]-A[j][S[i]];
}
for(j = 1; j <= N; j++)
A[i][j] += A[i][j-1];
res += A[i][N];
}
for(i = 1; i <= N; i++)
for(j = i+1; j <= N; j++)
if(S[i] == S[j])
res++;
}
void read_data(void)
{
int i, st, dr, m, r;
scanf("%d\n", &N);
for(i = 1; i <= N; i++)
scanf("%d ", &V[i]), S[i] = V[i];
sort(V+1, V+N+1);
for(i = 1; i <= N; i++)
{
st = 1, dr = N;
while(st <= dr)
{
m = (st+dr) >> 1;
if(V[m] <= S[i])
r = m, st = m+1;
else
dr = m-1;
}
S[i] = r;
}
}
void write_data(void)
{
printf("%u\n", res);
}
int main(void)
{
freopen("psir.in", "rt", stdin);
freopen("psir.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}