Codeforces Round #623 (Div. 2) D. Recommendations(优先队列)

题目链接:https://codeforces.com/contest/1315/problem/D

#include <bits/stdc++.h>
using ll = long long;
using namespace std;

priority_queue<int> q; //默认是大顶堆
ll ans, sum, num, i;

int main() {
    int n; cin >> n;
    pair<int, int> a[n];
    for (auto & i : a) cin >> i.first;
    for (auto & i : a) cin >> i.second;
    sort(a, a + n);
    while (!q.empty() || i < n) {
        if (q.empty()) num = a[i].first;
        while (i < n && a[i].first == num) {
            q.push(a[i].second);
            sum += a[i].second;
            ++i;
        }
        sum -= q.top(), q.pop();
        ans += sum, ++num;
    }
    cout << ans;
}

 

posted @ 2020-04-12 12:51  Kanoon  阅读(161)  评论(0)    收藏  举报