Codeforces Beta Round #13

C.Sequence

Difficulty\mathtt{Difficulty}=2200\mathtt{2200}
这道题目我们可以考虑直接上 STL
我们一个数一个数地放进一个大根堆(优先队列)
其实就是算到当前数时
取前面最大的数出来
假如现在这个数比前面最大数大或相等就没事
反之我们则需要考虑如何改为不降
我们肯定是将大的往小移,将小的往大移
那么花费一定是 ab|a-b|
为了不影响先前的答案
当然都是移到同一基准
即是先前的最大数
代码不难写出

#include<bits/stdc++.h>
#define BetterIO ios::sync_with_stdio(false)
using namespace std;
long long Total;
priority_queue< long long >Queue;
int main(void)
{
	BetterIO;
	register long long i;cin>>Total;
	register long long Ans(0);
	for(i=1;i<=Total;i++)
	{
		register long long Now;cin>>Now;
		Queue.push(Now);
		if(Queue.top()>Now)
		{
			Ans+=Queue.top()-Now;
			Queue.pop();
			Queue.push(Now);
		}
	}
	cout<<Ans<<endl;
	return 0;
}