给一个长度为n的正整数序列a,每次你可以花|ai-a′i|的代价把
ai修改成a′i,要求用最小的代价把数列修改成单调非降的(即
ai≤ai+1)。n≤5*10^5;ai≤10^9。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
#include <cmath>
#define File(x) "test."#x
#define For(i,s,e) for(int i=(s); i<=(e); i++)
#define Rep(i,s,e) for(int i=(s); i>=(e); i--)
using namespace std;
const int N=500000+3,Mod=20170408;
int n,x;
long long ans;
multiset<int,greater<int> > Set;
int main()
{
freopen(File(in),"r",stdin);
freopen(File(out),"w",stdout);
// ios::sync_with_stdio(false);
scanf("%d",&n);
For(i,1,n){
scanf("%d",&x);
Set.insert(x);
if(x<*Set.begin()){
ans+=abs(*Set.begin()-x);
Set.erase(Set.begin());
Set.insert(x);
}
}
cout<<ans<<endl;
return 0;
}