#include <bits/stdc++.h>
using std::make_pair;
using std::max;
using std::min;
using std::multiset;
using std::pair;
using std::sort;
using std::swap;
using std::vector;
long long read() {
  int f = 1;
  long long h = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') h = (h << 1) + (h << 3) + c - '0', c = getchar();
  return h * f;
}
const int MAXN = 101000;
int n;
long long a[MAXN];
int f[61][MAXN];
int W;
bool cmp(long long x, long long y) {
  return (x & ((1ll << W) - 1)) > (y & ((1ll << W) - 1));
}
long long mxa;
int main() {
  n = read();
  for (int i = 1; i <= n; i++) a[i] = read(), mxa = max(mxa, a[i]);
  for (int i = 1; i <= n; i++) a[i] = mxa - a[i];
  memset(f, 0x3f, sizeof(f));
  f[0][0] = 0;
  for (int w = 1; w <= 60; w++) {
    W = w - 1;
    sort(a + 1, a + n + 1, cmp);
    int cnt = 0, jw = 0;
    for (int i = 1; i <= n; i++) {
      if ((a[i] >> (w - 1)) & 1)
        cnt++;
      else
        ;
    }
    f[w][jw] = min(f[w][jw], f[w - 1][0] + cnt);
    for (int i = 1; i <= n; i++) {
      if ((a[i] >> (w - 1)) & 1)
        cnt--;
      else
        ;
      if ((a[i] >> (w - 1)) & 1)
        jw++;
      else
        cnt++;
      f[w][jw] = min(f[w][jw], f[w - 1][i] + cnt);
    }
    cnt = 0, jw = 0;
    for (int i = 1; i <= n; i++) {
      if ((a[i] >> (w - 1)) & 1)
        jw++;
      else
        cnt++;
    }
    f[w][jw] = min(f[w][jw], f[w - 1][0] + cnt);
    for (int i = 1; i <= n; i++) {
      if ((a[i] >> (w - 1)) & 1)
        jw--;
      else
        cnt--;
      if ((a[i] >> (w - 1)) & 1)
        cnt++, jw++;
      else
        jw++;
      f[w][jw] = min(f[w][jw], f[w - 1][i] + cnt);
    }
  }
  printf("%d\n", f[60][0]);
  return 0;
}
