塔子哥打周赛-阿里淘天2024笔试(codefun2000)

题目链接
塔子哥打周赛-阿里淘天2024笔试(codefun2000)

题目内容

塔子哥是leetcode周赛的忠实玩家,他总共有n个账号,每个账号的分数分别为ai ,现在我们记录了他m次的比赛记录,塔子哥每次都会使用分数最低的账号参赛,请问塔子哥每次参赛后,他的所有账号的最大得分是多少

输入描述

输入包含三行
第一行两个正整数n,m(l≤n,m( l ≤ n , m ≤ 1 0 5 l≤n,m≤10^5 ln,m105),分别表示塔子哥的账号个数和塔子哥新参加的比赛记录数。
第二行n个整数ai ( 0 ≤ a i ≤ 1 0 9 0≤ai ≤10^9 0ai109 ),表示塔子哥每个账号目前的分数。
第三行 m 个整数bj ( 0 ≤ b j ≤ 1 0 9 0≤bj≤10^9 0bj109 ),分别表示塔子哥每次比赛后,分数的变化值
(例如如果塔子哥使用分数为 x的账号参赛,那么他在参加完第j场数的变化值。比赛后,该账号分数会变为x+bj 。)

输出描述

输出包含m行,每行一个整数,表示塔子哥参与完第j场比赛后,他的所有账号的最大得分

样例1

输入

5 4
1145 1200 1300 1500 1600
10 270 450 500

输出

1600
1600
1650
1800

提示

第一次和第二次询问都加在1145上,数组变成 [1425,1200,1300,1500,1600],第三次和第四次分别加在1200和1300上

题解1

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
typedef long long LL;
int n, m, a[N], b[N];
LL ma;
priority_queue<LL, vector<LL>, greater<LL> > pq1; // 维护一个小顶堆

int main(){
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
		ma = max(ma, 1LL*a[i]);
		pq1.push(1LL*a[i]);
	}
	for(int i = 1; i <= m; i++) scanf("%d", &b[i]);
	for(int i = 1; i <= m; i++){
		LL mi = pq1.top();pq1.pop();
		LL sum = mi + b[i];
		pq1.push(sum);
		ma = max(ma, sum); // 维护第j次操作后的最大值
		printf("%lld\n", ma);
	}
	return 0;
}
  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值