#include <bits/stdc++.h>
using namespace std;
namespace QoE_Library {
namespace QL_Bare_Minimum {
const double PI = 3.141592653589793238460;
const long double pi = 10000 * acos(-1.0L);
const long double E = 2.7182818284590452353;
const long double eps = 1e-10;
const int DX4[] = {0, 1, 0, -1};
const int DY4[] = {1, 0, -1, 0};
const int DX8[] = {-1, -1, -1, 0, 0, 1, 1, 1};
const int DY8[] = {-1, 0, 1, -1, 1, -1, 0, 1};
const int neigh4[][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
const int neigh8[][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},
                         {1, 0},  {1, 1},   {0, 1},  {-1, 1}};
const int neigh9[][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1}, {1, 0},
                         {1, 1},  {0, 1},   {-1, 1}, {0, 0}};
template <typename T1>
class Vector3D {
 public:
  T1 x, y, z;
  Vector3D(T1 x1, T1 y1, T1 z1) : x(x1), y(y1), z(z1) {}
  Vector3D() {}
};
template <typename T1>
inline T1 to_type(string s) {
  T1 a;
  istringstream sin(s);
  sin >> a;
  return a;
}
template <typename T1>
inline string to_str(T1 a) {
  ostringstream sout;
  string s;
  sout >> a;
  return sout.str();
}
inline void inpS(char *a) { scanf("%s", a); }
inline int inpI() {
  int n = 0;
  int ch = getchar();
  int sign = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') sign = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    n = (n << 3) + (n << 1) + ch - '0', ch = getchar();
  n = n * sign;
  return n;
}
inline void inpI2(int &a, int &b) {
  a = inpI();
  b = inpI();
}
inline void inpI3(int &a, int &b, int &c) {
  a = inpI();
  b = inpI();
  c = inpI();
}
inline double inpD() {
  double res = 0.0;
  char c;
  while (1) {
    c = getchar();
    if (c == ' ' || c == '\n')
      continue;
    else
      break;
  }
  res = c - '0';
  while (1) {
    c = getchar();
    if (c >= '0' && c <= '9')
      res = 10 * res + c - '0';
    else
      break;
  }
  if (c == '.') {
    double decimal = 0.0, divi = 1.0;
    while (1) {
      c = getchar();
      if (c >= '0' && c <= '9')
        decimal += (c - '0') / (divi *= 10.0);
      else
        break;
    }
    res += decimal;
  }
  return res;
}
inline void outpD(double N) {
  char buff[24], sz = 0;
  int integer = N;
  int decimal = (N - integer) * 10000000;
  int tmp = decimal;
  while (decimal) {
    buff[sz++] = '0' + decimal % 10;
    decimal /= 10;
  }
  for (int decimal2 = 1000000; decimal2 > tmp; decimal2 /= 10) {
    buff[sz++] = '0';
  }
  buff[sz++] = '.';
  if (integer == 0) buff[sz++] = '0';
  while (integer) {
    buff[sz++] = '0' + integer % 10;
    integer /= 10;
  }
  while (--sz >= 0) putchar(buff[sz]);
  putchar(10);
}
inline void outpI(int a) {
  char c;
  char snum[20];
  int i = 0;
  int sign = 0;
  if (a < 0) sign = 1;
  a = abs(a);
  do {
    snum[i++] = a % 10 + 48;
    a = a / 10;
  } while (a != 0);
  i = i - 1;
  if (sign) putchar('-');
  while (i >= 0) putchar(snum[i--]);
  putchar('\n');
}
inline void outpI2(int a, int b) {
  printf("%d ", a);
  outpI(b);
}
inline int outpS(char *s) { return printf("%s\n", s); }
template <typename T1>
void QL_swap(T1 &x, T1 &y) {
  T1 tmp;
  tmp = x;
  x = y;
  y = tmp;
}
template <typename T1>
T1 gcd(T1 a, T1 b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long long int euclideanDistSq(long long int x1, long long int y1,
                              long long int x2, long long int y2) {
  return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
}
template <typename T>
long double euclideanDist(T x1, T y1, T x2, T y2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
template <typename T1>
T1 dotProd(T1 x1, T1 y1, T1 z1, T1 x2, T1 y2, T1 z2) {
  return x1 * x2 + y1 * y2 + z1 * z2;
}
template <typename T1>
Vector3D<T1> crossProd(Vector3D<T1> v1, Vector3D<T1> v2) {
  Vector3D<T1> v;
  v.x = v1.y * v2.z - v2.y * v1.z;
  v.y = v1.z * v2.x - v2.z * v1.x;
  v.z = v1.x * v2.y - v2.x * v1.y;
  return v;
}
}  // namespace QL_Bare_Minimum
}  // namespace QoE_Library
using namespace QoE_Library::QL_Bare_Minimum;
int main() {
  long long int n, t, dp[2][5005], a[5005];
  t = 1;
  set<long long int> s;
  while (t--) {
    cin >> n;
    for (int i = (0); i < (n); i = i + (1)) {
      cin >> a[i];
      s.insert(a[i]);
    }
    vector<long long int> v(s.begin(), s.end());
    dp[0][0] = abs(a[0] - v[0]);
    for (int i = (0); i < (n); i = i + (1)) {
      for (int j = (0); j < (v.size()); j = j + (1)) {
        long long int d1, d2 = LLONG_MAX;
        d1 = abs(a[i] - v[j]);
        if ((i - 1 <= n - 1 && i - 1 >= 0)) d1 += dp[(i - 1) % 2][j];
        if ((j - 1 <= v.size() - 1 && j - 1 >= 0)) d2 = dp[i % 2][j - 1];
        dp[i % 2][j] = min(d1, d2);
      }
    }
    cout << dp[(n - 1) % 2][v.size() - 1] << endl;
  }
}
