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