#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 300000 + 100;
typedef long long ll;
typedef long double ld;
multiset<int> st;
int n, tmp;
int main()
{
while (~scanf("%d", &n))
{
st.clear();
ll ans = 0;
for (int i = 0; i < n; i++)
{
scanf("%d",&tmp);
if (!st.empty() && *st.begin() < tmp)
{
ans += (ll)(tmp - *st.begin());
st.erase(st.begin());
st.insert(tmp);//插入一次如果后来的数把他剪掉,就代表后面的那个数
//直接剪去前面的,在插入一次,如果后面的数再减一次,就是减了一次他本身
st.insert(tmp);
//printf("%d\n",ans);
}
else
{
st.insert(tmp);
}
}
printf("%I64d\n", ans);
}
}
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 300000 + 100;
typedef long long ll;
typedef long double ld;
multiset<int> st;
int n, tmp;
int main()
{
while (~scanf("%d", &n))
{
st.clear();
ll ans = 0;
for (int i = 0; i < n; i++)
{
scanf("%d",&tmp);
if (!st.empty() && *st.begin() < tmp)
{
ans += (ll)(tmp - *st.begin());
st.erase(st.begin());
st.insert(tmp);//插入一次如果后来的数把他剪掉,就代表后面的那个数
//直接剪去前面的,在插入一次,如果后面的数再减一次,就是减了一次他本身
st.insert(tmp);
//printf("%d\n",ans);
}
else
{
st.insert(tmp);
}
}
printf("%I64d\n", ans);
}
}