MT3030 天梯赛

跟MT3029战神小码哥类似,都是贪心+堆。注意开long long

这里的堆顶为战斗力最小的,便于贪心的反悔操作。先按容忍度从大到小排序(q中总容忍度取决于最小的容忍度),再向q中存数,存到不能容忍之后再把堆顶踢出,取最大值。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const long long int N = 1e5 + 10;
long long int n, ans, sum;
struct node
{
    long long int a;
    long long int b;
    bool operator>(const node &b) const
    {
        return a > b.a;
    }
} a[N];
priority_queue<node, vector<node>, greater<node>> q; // 战斗力从小到大排列
bool cmp(node a, node b)
{ // 按b容忍度从大到小排序
    return a.b > b.b;
}
int main()
{
    cin >> n;
    for (long long int i = 1; i <= n; i++)
    {
        cin >> a[i].a >> a[i].b;
    }
     sort(a + 1, a + n + 1, cmp); // 按容忍度从大到小排列
    for (long long int i = 1; i <= n; i++)
    {
        q.push(a[i]);
        sum += a[i].a; // 存战斗力
        while (q.size() > a[i].b)
        {
            sum -= q.top().a; // 取出q.top()战斗力最小的
            q.pop();
        }
        ans = max(ans, sum);
    }
    cout << ans;
    return 0;
}
相关推荐
fffzd几秒前
C++入门(二)
开发语言·c++·算法·函数重载·引用·inline内联函数·nullptr
傻瓜搬砖人1 分钟前
c语言绿皮书第三版第十章习题
c语言·开发语言·算法
代钦塔拉4 分钟前
Qt 按钮 Lambda 信号槽重复绑定、多次触发 BUG 深度剖析与终极解决方案
c++·qt·bug
j_xxx404_4 分钟前
【Linux进程间通信】硬核剖析:消息队列、信号量、内核IPC资源统一管理与mmap加餐
linux·运维·开发语言·c++·人工智能·ai
qingy_20464 分钟前
Redis Zset 底层数据结构及其使用场景
数据结构·数据库·redis
Lazionr5 分钟前
数据结构堆详解:原理、实现与应用
数据结构·算法
Zephyr_010 分钟前
c++数据结构
数据结构·c++
龍汶10 分钟前
SystemC 三大通信机制实践:sc_signal /sc_buffer/sc_event 核心区别与适用场景详解
c++
故事和你9110 分钟前
蓝桥杯-2026年C++B组省赛
开发语言·数据结构·c++·算法·蓝桥杯·动态规划·图论
星恒随风12 分钟前
C语言算法复杂度详解:时间复杂度与空间复杂度一篇讲透
c语言·算法