题解:将beauty值从大到小排序。然后将所对应的length一个一个放入优先队列,length小的先出来,每次放都要sum*min(beauty)。
#include<bits/stdc++.h>
#include<queue>
#define ll long long
using namespace std;
struct node{
int l;
int b;
friend bool operator < (node a,node b){
return a.b > b.b;
}
}a[300010];
priority_queue<int,vector<int>,greater<int> >q;
int main(){
int n,k;
cin>>n>>k;
for(int i = 0 ; i < n ; i++){
cin>>a[i].l>>a[i].b;
}
sort(a,a+n);
ll ans = 0,sum = 0;
for(int i = 0 ; i < n ; i++){
q.push(a[i].l);
sum+=a[i].l;
while(q.size()>k){
sum-=q.top();
q.pop();
}
ans = max(ans,sum*a[i].b);
}
cout<<ans<<endl;
}