D 无限的韵律源点 (STL_set ,*****)

2024-04-23 22:44
文章标签 set 无限 stl 源点 韵律

本文主要是介绍D 无限的韵律源点 (STL_set ,*****),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

Arcaea(韵律源点)是一款著名的音乐游戏(以下简称 arc)。在 arc 中,玩家评分 (PTT) 是 total best 和 recent best 两部分分数维护的所有曲目的单曲评分平均值。

recent best 部分维护的,是你当前时刻下最近游玩的前 ra 首曲目 (包含当前时刻下游玩的曲目)中单曲得分最高的前 rb 首曲目;total best 部分维护的,是你当前时刻下所有已经游玩过的曲目中单曲得分最高的前 b 首曲目。你需要计算在你的游玩过程中,recent best 部分维护的曲目得分之和与 total best 部分维护的曲目得分之和的总和最大值。

形式化地说,给定一个正整数序列 ai(1≤i≤n)),设 Ri 表示 amax⁡(1,i−ra+1),⋯,ai​ 中最大的 min⁡(i,rb) 个数之和,设 Ti表示 a1,⋯ ,ai中最大的  min⁡(i,b) 个数之和。对于 1≤i≤n,求 Ri+Ti 的最大值。 

输入描述:

第一行输入四个整数 n,b,ra,rb(1≤rb≤ra≤n≤2×105,1≤b≤n≤2×105)。分别代表您游玩了 n 首曲目;在计算 total best 部分时,取历史单曲评分最高的 b 首曲目;在计算 recent best 部分时,取历史最近 ra 首曲目中单曲评分最高的 rb 首。第二行输入 n 个整数 ai(0≤ai≤109),代表了您在 n 个时刻内游玩曲目获得的单曲评分 ,输入的顺序就代表了您游玩的顺序。

输出描述:

 

输出一行一个整数,表示所求的总和最大值。

示例1

输入

5 2 3 2
1 6 2 3 3

输出

18

说明

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网用 total 表示已经游玩过曲目的序列;用 recent 表示已经游玩过的曲目中,历史最近 rarara 首曲目的序列。时刻 [0,5] 的 total 与 recent 部分维护过程如下:当 t=0,你还没有游玩过曲目,此时 total=[],recent=[],此刻计算得出的 PTT 为 0。当 t=1,你游玩了第一首曲目,获得的单曲得分为 1,此时 total=[(1)],recent=[(1)],此时的最大总和为 2。当 t=2,你游玩了第二首曲目,获得的单曲得分为 6,此时 total=[(1),(6)],recent=[(1),(6)],此时的最大总和为 14。当 t=3,你游玩了第三首曲目,获得的单曲得分为 2,此时 total=[1,(6),(2)],recent=[1,(6),(2)],此时的最大总和为 16。。当 t=4,你游玩了第四首曲目,获得的单曲得分为 3,此时total=[1,(6),2,(3)],recent=[(6),2,(3)],此时的最大总和为 18。当 t=5,你游玩了第五首曲目,获得的单曲得分为 3,此时 total=[1,(6),2,(3),3],recent=[2,(3),(3)],此时的最大总和为 15。由此可知,在时刻 4 计算出的最大总和最大,为 18。

解析:

s:模拟堆,记录最大的 b 个数据

sx:模拟堆,记录最后的 ra 个数中,最大的 rb 个数据

sy:最后的 ra 个数据中不存在 sx 中的数据

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<sstream>
#include<deque>
#include<unordered_map>
#include<unordered_set>
#include<bitset>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<long long, long long> PLL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
const int INF = 0x3f3f3f3f;
const LL Mod = 1e9 + 7;
const int N = 2e5 + 10, M = 4e5 + 10, P = 110;
int n, b, ra, rb;
int ar[N];
multiset<PII>s,sx;
multiset<PII,greater<PII>>sy;int main() {cin >> n >> b >> ra >> rb;for (int i = 1; i <= n; i++) {scanf("%d", &ar[i]);}LL sum1 = 0, sum2 = 0;LL ans = 0;for (int i = 1; i <= n; i++) {s.insert({ ar[i],i });sum1 += ar[i];if (s.size() > b) {auto t = *s.begin();s.erase(t);sum1 -= t.first;}if (i > ra) {int j = i - ra;if (sx.count({ ar[j],j })) {sx.erase({ ar[j],j });sum2 -= ar[j];}else if (sy.count({ ar[j],j })) {sy.erase({ ar[j],j });}}if (sx.size() && ar[i] >= sx.begin()->first) {sx.insert({ ar[i], i });sum2 += ar[i];}else {sy.insert({ ar[i],i });}if (sx.size() < rb && sy.size()) {auto t = *sy.begin();sy.erase(t);sx.insert(t);sum2 += t.first;}if (sx.size() > rb) {auto t = *sx.begin();sx.erase(t);sy.insert(t);sum2 -= t.first;}ans = max(ans,sum1 + sum2);}cout << ans << endl;return 0;
}

这篇关于D 无限的韵律源点 (STL_set ,*****)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/930090

相关文章

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

C++ STL 适配器

系列文章目录 模板特例化,偏特化,左右值引用 https://blog.csdn.net/surfaceyan/article/details/126794013 C++ STL 关联容器 https://blog.csdn.net/surfaceyan/article/details/127414434 C++ STL 序列式容器(二) https://blog.csdn.net/surfac

Android set Tag, findViewWithTag使用

设置了tag为“principal”的view ImageView principal = (ImageView) findViewById(R.id.imagen_home_0);principal.setTag("principal"); 在其它地方获取,获取已经设置了tag为“principal”的view LayoutInflater inflater = LayoutInflate

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

颠覆你的开发模式:敏捷思维带来的无限可能

敏捷软件开发作为现代软件工程的重要方法论,强调快速响应变化和持续交付价值。通过灵活的开发模式和高效的团队协作,敏捷方法在应对动态变化和不确定性方面表现出色。本文将结合学习和分析,探讨系统变化对敏捷开发的影响、业务与技术的对齐以及敏捷方法如何在产品开发过程中处理持续变化和迭代。 系统变化对敏捷软件开发的影响 在敏捷软件开发中,系统变化的管理至关重要。系统变化可以是需求的改变、技术的升级、

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib