Cod sursa(job #552602)

Utilizator SpiderManSimoiu Robert SpiderMan Data 12 martie 2011 16:53:57
Problema P-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
# include <algorithm>
# include <cstdio>
# include <vector>
using namespace std ;

const char *FIN = "psir.in", *FOU = "psir.out" ;
const int MAX = 2006 ;

unsigned dp[MAX][MAX], sol ;
vector < int > A, B ;
int N ;

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;

    scanf ( "%d", &N ) ;
    B.push_back ( 0 ) ;
    for ( int i = 0, j; i < N; ++i ) {
        scanf ( "%d", &j ) ;
        A.push_back ( j ) , B.push_back ( j ) ;
    }
    sort ( A.begin (), A.end () ) ;
    A.erase ( unique ( A.begin (), A.end () ), A.end () ) ;
    for ( int i = 1; i <= N; ++i ) {
        B[i] = lower_bound ( A.begin (), A.end (), B[i] ) - A.begin () + 1  ;
    }

    for ( int i = 1; i <= N; ++i ) {
        for ( int j = 1; j < i ; ++j ) {
            dp[i][B[j]] += ( B[i] > B[j] ? dp[j][N] - dp[j][B[i]] : B[i] < B[j] ? dp[j][B[i] - 1] : 0) + 1  ;
        }
        for ( int j = 2; j <= N; ++j ) {
            dp[i][j] += dp[i][j - 1] ;
        }
    }
    for ( int i = 1; i <= N; ++i ) {
        sol += dp[i][N] ;
    }
    fprintf ( fopen ( FOU, "w" ) , "%u", sol ) ;
}