Cod sursa(job #2439270)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 15 iulie 2019 15:48:34
Problema P-sir Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include<cstdio>
#include<map>
using namespace std;
const int N=2005;
int v[N];
int d[N][N];
map <int,int> m;
const long long MOD=1LL<<32;
int main()
{
    FILE*fin,*fout;
    fin=fopen("psir.in","r");
    fout=fopen("psir.out","w");
    int n;
    fscanf(fin,"%d",&n);
    for(int i=1;i<=n;i++){
      fscanf(fin,"%d",&v[i]);
      m[v[i]]=1;
    }
    int id=0;
    for(auto &i:m){
      i.second=++id;
    }
    for(int i=1;i<=n;i++){
      v[i]=m[v[i]];
    }
    long long rasp=0;
    for(int i=2;i<=n;i++){
      for(int j=1;j<i;j++){
        if(v[i]>v[j]){
          rasp+=(d[j][id]-d[j][v[i]]+1+MOD)%MOD;
          rasp%=MOD;
          d[i][v[j]]+=(d[j][id]-d[j][v[i]]+1+MOD)%MOD;
          d[i][v[j]]%=MOD;
        }
        else if(v[i]<v[j]){
          rasp+=(d[j][v[i]-1]+1+MOD)%MOD;
          rasp%=MOD;
          d[i][v[j]]+=(d[j][v[i]-1]+1+MOD)%MOD;
          d[i][v[j]]%=MOD;
        }
        else{
          rasp++;
          rasp%=MOD;
          d[i][v[j]]++;
          d[i][v[j]]%=MOD;
        }
      }
      for(int j=1;j<=id;j++){
        d[i][j]+=d[i][j-1];
        d[i][j]%=MOD;
      }
    }
    fprintf(fout,"%lld",rasp);
    return 0;
}