Luogu P2893
P2893.[USACO08FEB]Making the Grade G
这道题目我们可以考虑直接上 STL
我们一个数一个数地放进一个大根堆(优先队列)
其实就是算到当前数时
取前面最大的数出来
假如现在这个数比前面最大数大或相等就没事
反之我们则需要考虑如何改为不降
我们肯定是将大的往小移,将小的往大移
那么花费一定是
为了不影响先前的答案
当然都是移到同一基准
即是先前的最大数
代码不难写出
#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;
}