// Инверсия: (i, j) : i < j, a[i] > a[j]

const int N = (int)1e6;

int b[N];
int inv_l[N];

// Java : l, r, a
void MSort( int n, int *a )
{
  if (n <= 1)
    return;

  int m = n / 2;
  MSort(m, a);
  MSort(n - m, a + m);

  // [0, m) [m, n) --> [0, n)
  // для любых i != j : a[i] != a[j]
  // a[i] = 1..n  
  int i = 0, j = m;
  for (int k = 0; k < n; k++)
    if (i < m && (j == n || a[i] < a[j]))
      b[k] = a[i++];
    else
      b[k] = a[j], inv_l[a[j++]] += m - i; // [i, m) a[i]..a[m - 1] > a[j]

  for (int k = 0; k < n; k++)
    a[k] = b[k];
}

// j : inv_l[j] = кол-во i, что i < j, a[i] > a[j]
// j : inv_r[j] = кол-во i, что i > j, a[i] < a[j]