#include "teatr.h"
#include "message.h"
#include "bits/stdc++.h"
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
long long g=0;
int tab[100000];
int p[100000];
void bubble(int n)
{
for(int i=0;i<n;i++)
for(int j=1;j<n-i;j++)
if(tab[j-1]<tab[j]){
swap(tab[j-1], tab[j]);
g++;
}
}
void merget (int left ,int srodek, int right)
{
int i1,i2,i;
for ( i=left; i<=right; i++) p[i]=tab[i];
i1=left; i2=srodek+1; int k=left;
for( i = left; i <= right; i++)
{
if(i2 <=right && i1<=srodek)
{
if(p[i1] <= p[i2]){
tab[k++]=p[i1++];
}
else {
tab[k++]=p[i2++];
g+=(srodek-i1)+1;
}
}
}
for(int i=i1 ; i<=srodek ; i++,k++) tab[k]=p[i];
}
void mergesort (int left , int right)
{
int srodek;
if (left<right) {
srodek=(left+right)/2;
mergesort(left, srodek);
mergesort(srodek+1, right);
merget(left, srodek, right);
}
}
int main()
{
int d=MyNodeId();
if(d==0)
{
int n=GetN();
for(int i=0 ; i<n ; i++)
{
int h=GetElement(i);
tab[i]=h;
}
// if(n<=1000) bubble(n);
// else
//{
mergesort(0,n-1);
// }
/* for (int i=0; i<n; i++)
{
if (tab[i]<tab[i+1])
{
swap(tab[i],tab[i+1]);
g++;
}
}
*/
if(g<0)g=0;
// for(int i=0; i<n ; i++)
//{
// cout<<tab[i]<<" ";
// }
//cout<<endl;
cout<<g<<endl;
g=0;
}
return 0;
}
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #include "teatr.h" #include "message.h" #include "bits/stdc++.h" #include<iostream> #include<vector> #include<algorithm> using namespace std; long long g=0; int tab[100000]; int p[100000]; void bubble(int n) { for(int i=0;i<n;i++) for(int j=1;j<n-i;j++) if(tab[j-1]<tab[j]){ swap(tab[j-1], tab[j]); g++; } } void merget (int left ,int srodek, int right) { int i1,i2,i; for ( i=left; i<=right; i++) p[i]=tab[i]; i1=left; i2=srodek+1; int k=left; for( i = left; i <= right; i++) { if(i2 <=right && i1<=srodek) { if(p[i1] <= p[i2]){ tab[k++]=p[i1++]; } else { tab[k++]=p[i2++]; g+=(srodek-i1)+1; } } } for(int i=i1 ; i<=srodek ; i++,k++) tab[k]=p[i]; } void mergesort (int left , int right) { int srodek; if (left<right) { srodek=(left+right)/2; mergesort(left, srodek); mergesort(srodek+1, right); merget(left, srodek, right); } } int main() { int d=MyNodeId(); if(d==0) { int n=GetN(); for(int i=0 ; i<n ; i++) { int h=GetElement(i); tab[i]=h; } // if(n<=1000) bubble(n); // else //{ mergesort(0,n-1); // } /* for (int i=0; i<n; i++) { if (tab[i]<tab[i+1]) { swap(tab[i],tab[i+1]); g++; } } */ if(g<0)g=0; // for(int i=0; i<n ; i++) //{ // cout<<tab[i]<<" "; // } //cout<<endl; cout<<g<<endl; g=0; } return 0; } |
English