[Offer收割]编程练习赛96 register

Ended

Participants:98

Verdict:Accepted
Score:100 / 100
Submitted:2019-03-17 13:18:57

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll num[100010];
ll ans1 = 0,ans2 =0;
int main(){
    int n;scanf("%d",&n);
    priority_queue<int >que;
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&num[i]);
        if(!que.empty()&&que.top()>num[i])
            ans1 += que.top() - num[i];
        que.push(num[i]);
        que.push(num[i]);
        que.pop();
    }
    priority_queue<int >que1;
    for(int i=1;i<=n;i++)
    {
        if(!que1.empty()&&-que1.top()<num[i])
            ans2 += que1.top() + num[i];
        que1.push(-num[i]);
        que1.push(-num[i]);
        que1.pop();
    }
    printf("%lld\n",min(ans1,ans2) );
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX