Cod sursa(job #1346365)

Utilizator nimicLeoveanu Mihaita Alexandru nimic Data 18 februarie 2015 10:44:42
Problema P-sir Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("psir.in");
ofstream out("psir.out");

const int nmax = 2006;
const long long mod = 4294967296;
int v[nmax], n, p, pozin[nmax], poz[nmax], first;
long long rasp, d[nmax][nmax];

bool compar(int a, int b)
{
    return v[a]<v[b];
}

int main(){
	int player_unu=0;

	in>>n;
    for(int i = 1; i<=n; i++)
    {
        in>>v[i];
        pozin[i] = i;
    }
 
    sort(pozin + 1, pozin + n + 1, compar);
 
    for(int i = 1; i<=n; i++)
    {
		first++;
        poz[pozin[i]] = first;
 
        while(v[pozin[i]]==v[pozin[i + 1]])
            poz[pozin[++i]] = first;
    }
 
 
    for(int i = 2; i<=n; i++)
    {
        for(int j = 1; j<i; j++)
        {
                if(v[j]>v[i])
                    d[i][poz[j]] = (d[i][poz[j]] + d[j][1] - d[j][poz[i]] + mod) % mod;
                if(v[j]<v[i])
					d[i][poz[j]] = (d[i][poz[j]] + d[j][poz[i] + 1]) % mod;
        }
 
        for(int j = 1; j<i; j++)
            d[i][poz[j]]++;
 
        for(int j = first; j>=1; j--)
            d[i][j] = (d[i][j] + d[i][j + 1]) % mod;
    }
 
    for(int i = 1; i<=n; i++)
        rasp = ( rasp + d[i][1] ) % mod;
 
 
	out<<rasp<<'\n';

	return player_unu;
}