Codeforces 1140C(贪心+堆)
2024-08-26 08:20:39
题面
题意:
给出长度为n的序列b,t,定义一个子序列的值为\(\min\{ b_i\} \times \sum t_i\),求所有子序列中值最大的一个,输出最大值
分析
假如固定某个b[i],则最大值为\(b_i \times \sum t_j (b_j\geq b_i)\),且t[j]为所有满足条件的t[j]中最大的k个
贪心,先按b[i]从大到小排序
然后从左到右扫描一遍,维护一个最小堆,堆里存储最大的k个数
每次把t[i]插入,如果堆的大小超过k就弹出堆顶,然后更新答案
代码
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#define maxn 300005
using namespace std;
struct node{
int len;
int beu;
friend bool operator < (node p,node q){
return p.beu>q.beu;
}
}a[maxn];
priority_queue<int,vector<int>,greater<int> >h;
int n,k;
int main(){
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d %d",&a[i].len,&a[i].beu);
}
sort(a+1,a+1+n);
long long sum=0,ans=0;
for(int i=1;i<=n;i++){
h.push(a[i].len);
sum+=a[i].len;
while(h.size()>k){
sum-=h.top();
h.pop();
}
ans=max(ans,sum*a[i].beu);
}
printf("%I64d\n",ans);
}
最新文章
- PHP排序函数
- django学习日志之自定义用户扩展
- Linux资源控制-CPU和内存【转】
- 上传至应用商店以及testflight相关。
- 原始套接字的简单tcp包嗅探
- 谈Delphi中SSL协议的应用(好多相关文章)
- 离散信号MATLAB频谱分析程序
- expect set timeout -1 永不超时
- malloc/free和new/delete的区别汇总
- thinkPHP框架学习笔记
- mybatis调用oracle存储过程的几个参考例子
- 深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码
- PHP : MySQLi【面向过程】操作数据库【 连接、建库、建表、增、删、改、查、关闭】
- 由n个元素组成的数组,n-2个数出现了偶数次,两个数出现了奇数次,且这两个数不相等,如何用O(1)的空间复杂度,找出这两个数
- Unity3D学习笔记(二十五):Json
- phpStudy配置站点 解决You don&#39;t have permission to access / on this server
- Zookeeper 快速理解
- SVN设置没有写log不能commit
- addslashes — 使用反斜线引用字符串
- IO流常规操作