#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;
}
}
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; } } |
English