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