程式語言 - LeetCode - C++ - 2542. Maximum Subsequence Score



參考資訊:
https://algo.monster/liteproblems/2542
https://www.cnblogs.com/cnoodle/p/17549555.html
https://www.geeksforgeeks.org/c/c-program-to-implement-priority-queue/

題目:


解答:

class Solution {
public:
    long long maxScore(vector<int>& nums1, vector<int>& nums2, int k) {
        vector<pair<int, int>> s;

        for (int i = 0; i < nums1.size(); i++) {
            s.emplace_back(pair<int, int>(nums2[i], nums1[i]));
        }
        sort(s.begin(), s.end());

        long long r = 0;
        long long sum = 0;
        priority_queue<int, vector<int>, greater<int>> q;

        for (auto it = s.rbegin(); it != s.rend(); it++) {
            int n2 = it->first;
            int n1 = it->second;

            sum += n1;
            q.push(n1);

            if (q.size() == k) {
                r = max(r, sum * n2);

                sum -= q.top();
                q.pop();
            }
        }

        return r;
    }
};