5359. 最大的团队表现值



图片说明



首先思路就是枚举效率的最小值,可以先对效率从小到大排序。
对于每次选择一个效率值,必须找到后面的(k-1)大的速率值,可以用堆维护。
因为最多可以选择k个,只有后k个最大的效率值,才可以这样,其他情况必选k个。


class Solution {
public:
    const int mod=1e9+7;
    int maxPerformance(int n, vector<int>& s, vector<int>& e, int k) {
        pair<int,int>p[n+2];
        long long sum=0,ans=0;
        for(int i=1;i<=n;i++)p[i]={-e[i-1],-s[i-1]};
        sort(p+1,p+1+n);
        priority_queue<int>q;
        for(int i=1;i<=n;i++){
            if(i<=k){
                sum-=p[i].second;
                q.push(p[i].second);
                ans=max(ans,sum*(-p[i].first));
            }else{
                int t=q.top();
                q.pop();
                sum+=t-p[i].second;
                q.push(p[i].second);
                ans=max(ans,sum*(-p[i].first));
            }
        }
        return ans%mod;
    }
};