1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include<teatr.h>
#include<message.h>
#include "bits/stdc++.h"
typedef long long ll;
using namespace std;
int laczenie(int tablica[],int t_pom[],int poczatek, int srodek, int koniec,ll &wynik)
{
int pom_1;
int pom_2;
int pom_3;

for (int y=poczatek;y<=koniec;y++)
{
    t_pom[y]=tablica[y];
}

pom_1=poczatek;
pom_2=srodek+1;
pom_3=poczatek;
while(pom_1<=srodek& pom_2<=koniec)
{
if (t_pom[pom_1] <= t_pom[pom_2])
    {
    tablica[pom_3]=t_pom[pom_1];

    pom_1++;
    pom_3++;
    }
else
    {
    tablica[pom_3]=t_pom[pom_2];
    wynik+=srodek-pom_1+1;
    pom_3++;
    pom_2++;
    }
}
while (pom_1<=srodek)
{
    tablica[pom_3]=t_pom[pom_1];
    pom_3++;
    pom_1++;

}
}
void sortowanie(int tablica[],int t_pom[],int poczatek, int koniec,ll &wynik)
{
int srodek;
if (poczatek<koniec)
{
srodek=poczatek+((koniec-poczatek)/2);
sortowanie(tablica,t_pom,poczatek, srodek,wynik);   //dzielenie sobie na "mniejsze tablice"
sortowanie(tablica,t_pom,srodek+1, koniec,wynik);
laczenie(tablica,t_pom,poczatek, srodek, koniec,wynik); //scalanie
}
}
int main() {
int asd = MyNodeId();
if(asd==0)
{
    int ilosc =GetN();
    int tablica[ilosc];
    int t_pom[ilosc];
    ll wynik =0;
    for(int g=0;g<ilosc;g++)
    {
        int u=GetElement(g);
        tablica[g]= u;
    }
    sortowanie(tablica,t_pom,0,ilosc-1,wynik);  //wywolanie rekurencji
    cout << wynik;
}
}