关于NOI2010“超级钢琴”的反思
[NOI2010] 超级钢琴
题目描述
小 Z 是一个小有名气的钢琴家,最近 C 博士送给了小 Z 一架超级钢琴,小 Z 希望能够用这架钢琴创作出世界上最美妙的音乐。
这架超级钢琴可以弹奏出 \(n\) 个音符,编号为 \(1\) 至 \(n\)。第 \(i\) 个音符的美妙度为 \(A_i\),其中 \(A_i\) 可正可负。
一个“超级和弦”由若干个编号连续的音符组成,包含的音符个数不少于 \(L\) 且不多于 \(R\)。我们定义超级和弦的美妙度为其包含的所有音符的美妙度之和。两个超级和弦被认为是相同的,当且仅当这两个超级和弦所包含的音符集合是相同的。
小 Z 决定创作一首由 \(k\) 个超级和弦组成的乐曲,为了使得乐曲更加动听,小 Z 要求该乐曲由 \(k\) 个不同的超级和弦组成。我们定义一首乐曲的美妙度为其所包含的所有超级和弦的美妙度之和。小 Z 想知道他能够创作出来的乐曲美妙度最大值是多少。
输入格式
输入第一行包含四个正整数 \(n, k, L, R\)。其中 \(n\) 为音符的个数,\(k\) 为乐曲所包含的超级和弦个数,\(L\) 和 \(R\) 分别是超级和弦所包含音符个数的下限和上限。
接下来 \(n\) 行,每行包含一个整数 \(A_i\),表示按编号从小到大每个音符的美妙度。
输出格式
输出只有一个整数,表示乐曲美妙度的最大值。
样例 #1
样例输入 #1
4 3 2 3
3
2
-6
8
样例输出 #1
11
提示
样例解释
共有 \(5\) 种不同的超级和弦:
- 音符 \(1 \sim 2\),美妙度为 \(3+2=5\);
- 音符 \(2 \sim 3\),美妙度为 \(2+(-6)=-4\);
- 音符 \(3 \sim 4\),美妙度为 \((-6)+8=2\);
- 音符 \(1 \sim 3\),美妙度为 \(3+2+(-6)=-1\);
- 音符 \(2 \sim 4\),美妙度为 \(2+(-6)+8=4\)。
最优方案为:乐曲由和弦 \(1,3,5\) 组成,美妙度为 \(5+2+4=11\)。

所有数据满足:\(-1000 \leq A_i \leq 1000\),\(1 \leq L \leq R \leq n\) 且保证一定存在满足要求的乐曲。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int s[500010];
struct liu
{
int l,r,las,id;
friend bool operator <(liu a,liu b)
{
return s[a.las]-s[a.id-1]<s[b.las]-s[b.id-1];
}
}a;
priority_queue <liu>q;
int n;
int f[1000010][25];
void init()
{
for(int i=1;i<=n;i++)
{
f[i][0]=i;
}
for(int i=1;(1<<i)<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(s[f[j][i-1]]>s[f[j+(1<<(i-1))][i-1]])
f[j][i]=f[j][i-1];
else
f[j][i]=f[j+(1<<(i-1))][i-1];
}
}
}
int st(int l,int r)
{
int k=log2(r-l+1);
if(s[f[l][k]]>s[f[r-(1<<k)+1][k]])
return f[l][k];
else
return f[r-(1<<k)+1][k];
}
int main()
{
int k,l,r;
scanf("%d%d%d%d",&n,&k,&l,&r);
for(int i=1;i<=n;i++)
{
scanf("%d",&s[i]);
s[i]+=s[i-1];
}
init();
for(int i=1;i<=n;i++)
{
a.id=i;
int ll=i+l-1,rr=min(n,i+r-1);
if(rr>=ll)
{
int fd=st(ll,rr);
a.las=fd;
a.l=ll;
a.r=rr;
q.push(a);
}
}
long long ans=0;
for(int i=1;i<=k;i++)
{
a=q.top();
q.pop();
ans+=(long long)(s[a.las]-s[a.id-1]);
int ll=a.l,rr=a.r,aa=a.las;
if(aa+1<=rr)
{
int fd=st(aa+1,rr);
a.las=fd;
a.l=aa+1;
a.r=rr;
q.push(a);
}
if(aa-1>=ll)
{
int fd=st(ll,aa-1);
a.las=fd;
a.l=ll;
a.r=aa-1;
q.push(a);
}
}
printf("%lld",ans);
return 0;
}
1.应用前缀和,可以把最值和和的最值结合起来
2.优先队列其实没有那么慢
3.要敢写深想
4.st表还可以和前缀和结合起来
5.一点点的失误可能会MLE
关于NOI2010“超级钢琴”的反思的更多相关文章
- BZOJ 2006: [NOI2010]超级钢琴
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2613 Solved: 1297[Submit][Statu ...
- Bzoj 2006: [NOI2010]超级钢琴 堆,ST表
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2222 Solved: 1082[Submit][Statu ...
- NOI2010超级钢琴 2
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 1296 Solved: 606[Submit][Status ...
- BZOJ 2006: [NOI2010]超级钢琴( RMQ + 堆 )
取最大的K个, 用堆和RMQ来加速... ----------------------------------------------------------------- #include<c ...
- BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...
- bzoj2006 [NOI2010]超级钢琴 (及其拓展)
bzoj2006 [NOI2010]超级钢琴 给定一个序列,求长度在 \([L,\ R]\) 之间的区间和的前 \(k\) 大之和 \(n\leq5\times10^5,\ k\leq2\times1 ...
- P2048 [NOI2010]超级钢琴(RMQ+堆+贪心)
P2048 [NOI2010]超级钢琴 区间和--->前缀和做差 多次查询区间和最大--->前缀和RMQ 每次取出最大的区间和--->堆 于是我们设个3元组$(o,l,r)$,表示左 ...
- 洛谷 P2048 [NOI2010]超级钢琴 解题报告
P2048 [NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为 ...
- bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴
http://www.lydsy.com/JudgeOnline/problem.php?id=2006 输出最大的k个 sum[r]-sum[l-1] (L<=r-l+1<=R) 之和 ...
- 【BZOJ 2006】2006: [NOI2010]超级钢琴(RMQ+优先队列)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2792 Solved: 1388 Description 小 ...
随机推荐
- 获取电脑的网络连接状态(三)Ping
网络连接判断,使用ping测试获取: 1 private static async Task<bool> IsPingSuccess() 2 { 3 try 4 { 5 using (Pi ...
- [OpenCV-Python] 14 几何变换
文章目录 OpenCV-Python:IV OpenCV中的图像处理 14 几何变换 14.1 扩展缩放 14.2 平移 14.3 旋转 14.4 仿射变换 14.5 透视变换 OpenCV-Pyth ...
- 云原生时代崛起的编程语言Go常用标准库实战
@ 目录 基础标准库 简述 字符串-string 底层结构 函数 长度 格式化输出 模版-template text/template html/template 正则表达式-regexp 编码-en ...
- abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之下(六十四)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...
- 音视频八股文(11)-- ffmpeg 音频重采样
1重采样 1.1 什么是重采样 所谓的重采样,就是改变⾳频的采样率.sample format.声道数等参数,使之按照我们期望的参数输出. 1.2 为什么要重采样 为什么要重采样?当然是原有的⾳频参数 ...
- vant中van-dialog组件点击确认按钮禁止弹窗自动关闭
1.在van-dialog组件中添加 before-close 属性, 2.定义该方法 newGroupBefColse(action, done) { if (action == 'confirm' ...
- 认识CPU底层原理(1)——MOSFET
本文为B站UP主硬件茶谈制作的系列科普<[硬件科普]带你认识CPU>系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 近年来,由于国内外各种因素影响,半导体行业逐渐被推向风口 ...
- pycharm-professional-2023 下载安装
PyCharm Professional 是一款针对 Python 编程的集成开发环境 (IDE),由 JetBrains 公司开发和维护.它是 PyCharm 社区版的升级版,提供了更多的功能和工具 ...
- 如何进行测试分析与设计-HTSM启发式测试策略模型 | 京东云技术团队
测试,没有分析与设计就失去了灵魂: 测试人员在编写用例之前,该如何进行测试分析与设计呢?上次在<测试的底层逻辑>中讲到了[输入输出测试模型],还讲到了[2W+1H测试分析法],但2W1H分 ...
- vue-router几大坑
如今vue使用率很高,踩坑这就是很平常的了,使用了几年坑都依然没踩完,纠结呀 一.router.js配置要点 大家都知道vue 是组件化开发,页面很多路由难免, 这里是路由配置router.js 最外 ...