#include <bits/stdc++.h>
using namespace std;
int t[10 * 300010][2], a[300010];
void build(int v, int tl, int tr) {
  if (tl == tr) {
    t[v][0] = a[tl];
    t[v][1] = tl;
  } else {
    int tm = (tl + tr) >> 1;
    build(v << 1, tl, tm);
    build((v << 1) + 1, tm + 1, tr);
    if (t[v << 1][0] < t[(v << 1) + 1][0]) {
      t[v][0] = t[v << 1][0];
      t[v][1] = t[v << 1][1];
    } else {
      t[v][0] = t[(v << 1) + 1][0];
      t[v][1] = t[(v << 1) + 1][1];
    }
  }
}
pair<int, int> qry(int v, int tl, int tr, int l, int r) {
  if (l > r) {
    return {1000000000, 0};
  }
  if (tl == l && tr == r) {
    return {t[v][0], t[v][1]};
  }
  int tm = (tl + tr) >> 1;
  pair<int, int> p1, p2;
  p1 = qry(v << 1, tl, tm, l, min(tm, r));
  p2 = qry((v << 1) + 1, tm + 1, tr, max(l, tm + 1), r);
  if (p1.first < p2.first) {
    return p1;
  } else {
    return p2;
  }
}
void update(int v, int tl, int tr, int pos, int val) {
  if (tl == tr) {
    t[v][0] = val;
    t[v][1] = pos;
  } else {
    int tm = (tl + tr) >> 1;
    if (pos <= tm) {
      update(v << 1, tl, tm, pos, val);
    } else {
      update((v << 1) + 1, tm + 1, tr, pos, val);
    }
    if (t[v << 1][0] < t[(v << 1) + 1][0]) {
      t[v][0] = t[v << 1][0];
      t[v][1] = t[v << 1][1];
    } else {
      t[v][0] = t[(v << 1) + 1][0];
      t[v][1] = t[(v << 1) + 1][1];
    }
  }
}
set<pair<int, int> > s;
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
    s.insert({a[i], i});
  }
  long long ans = 0;
  build(1, 0, n - 1);
  for (int i = 1; i < n; ++i) {
    pair<int, int> val = qry(1, 0, n - 1, 0, i - 1);
    if (a[i] > val.first) {
      ans += a[i] - val.first;
      update(1, 0, n - 1, val.second, a[i]);
    }
  }
  printf("%lld\n", ans);
}
