Cod sursa(job #2042821)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 19 octombrie 2017 11:24:43
Problema P-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream>
#include<algorithm>
#define mod (1LL << 32)
using namespace std;
unsigned int n, i, j, nr, sol;
unsigned int v[2005], w[2005], d[2005][2005];
ifstream fin("psir.in");
ofstream fout("psir.out");
int main(){
    fin>> n;
    for(i = 1; i <= n; i++){
        fin>> v[i];
        w[i] = v[i];
    }
    sort(w + 1, w + n + 1);
    nr = 1;
    for(i = 2; i <= n; i++){
        if(w[i] != w[nr]){
            w[++nr] = w[i];
        }
    }
    for(i = 1; i <= n; i++){
        for(j = 1; j <= nr; j++){
            if(v[i] == w[j]){
                v[i] = j;
            }
        }
    }
    for(i = 2; i <= n; i++){
        for(j = i - 1; j >= 1; j--){
            if(v[i] == v[j]){
                d[i][ v[j] ] = (1LL + d[i][ v[j] ]) & (mod - 1);
            }
            else{
                if(v[i] < v[j]){
                    d[i][ v[j] ] = (1LL + d[i][ v[j] ] + d[j][ v[i] - 1]) & (mod - 1);
                }
                else{
                    d[i][ v[j] ] = (1LL + mod + d[i][ v[j] ] + d[j][nr] - d[j][ v[i] ]) & (mod - 1);
                }
            }
        }
        for(j = 1; j <= nr; j++){
            sol = (sol * 1LL + d[i][j]) & (mod - 1);
            d[i][j] = (d[i][j] * 1LL + d[i][j - 1]) & (mod - 1);
        }
    }
    fout<< sol <<"\n";
    return 0;
}