Cod sursa(job #2195761)

Utilizator EmplopiStefan Nitu Emplopi Data 17 aprilie 2018 12:32:31
Problema Sortare prin comparare Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <stdlib.h>

//void ic(int st, int dr);

int v[100002], aux[100002];

/*void dei(int st, int dr){
    int m, x;
    if(st==dr)
        return;
    m=(st+dr)/2;
    dei(st, m);
    dei(m+1, dr);
    x=ic(st, dr);
}*/

int ic(int st, int dr){
    int m, i, j, k, r=0;
    m=(st+dr)/2;
    i=st;
    k=st;
    j=m+1;
    while(i<=m && j<=dr){
        if(v[i]<=v[j])
            aux[k++]=v[i++];
        else{
            aux[k++]=v[j++];
            r+=m-i+1;
        }
    }
    while(i<=m)
        aux[k++]=v[i++];
    while(j<=dr)
        aux[k++]=v[j++];
    for(k=st;k<=dr;k++)
        v[k]=aux[k];

    return r%9917;
}

int nrinv(int st, int dr){
    int m, r=0;
    if(st==dr)
        return 0;
    m=(st+dr)/2;
    r+=nrinv(st, m);
    r+=nrinv(m+1, dr);
    r+=ic(st, dr);

    return r%9917;
}

int main(){
    FILE *fin, *fout;
    int n, i;
    fin=fopen("algsort.in", "r");
    fout=fopen("algsort.out", "w");
    fscanf(fin, "%d", &n);
    for(i=0;i<n;i++)
        fscanf(fin, "%d", &v[i]);
    fprintf(fout, "%d ", nrinv(0, n-1));
    fclose(fin);
    fclose(fout);

    return 0;
}