标签:Q1 Playlist Q2 CF1140C int top push sum
给你n个二元组,选出不多于k个满足第一维的min乘上第二维的sum最大。
傻逼题,按第一维排个序然后对顶堆求第二维前k大之和就没了。
1 #include <bits/stdc++.h> 2 3 typedef long long LL; 4 const int N = 300010; 5 6 std::priority_queue<int> Q1, Q2; 7 struct Node { 8 int a, t; 9 inline bool operator <(const Node &w) const { 10 return a < w.a; 11 } 12 }node[N]; 13 int k; 14 LL sum; 15 16 inline void insert(int x) { 17 if(!Q2.size() || x > Q2.top()) { 18 Q1.push(-x); 19 sum += x; 20 } 21 else Q2.push(x); 22 while(Q1.size() > k) { 23 Q2.push(-Q1.top()); 24 sum += Q1.top(); 25 Q1.pop(); 26 } 27 while(Q1.size() < k && Q2.size()) { 28 Q1.push(-Q2.top()); 29 sum += Q2.top(); 30 Q2.pop(); 31 } 32 return; 33 } 34 35 int main() { 36 int n; 37 scanf("%d%d", &n, &k); 38 for(int i = 1; i <= n; i++) { 39 scanf("%d%d", &node[i].t, &node[i].a); 40 } 41 std::sort(node + 1, node + n + 1); 42 43 LL ans = 0; 44 for(int i = n; i >= 1; i--) { 45 insert(node[i].t); 46 ans = std::max(ans, 1ll * node[i].a * sum); 47 } 48 49 printf("%lld\n", ans); 50 return 0; 51 }AC代码
标签:Q1,Playlist,Q2,CF1140C,int,top,push,sum 来源: https://www.cnblogs.com/huyufeifei/p/10589481.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。