题目描述:

小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的
音乐。 这架超级钢琴可以弹奏出n个音符,编号为1至n。第i个音符的美妙度为Ai,其中Ai可正可负。 一个“超级
和弦”由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R。我们定义超级和弦的美妙度为其包含的
所有音符的美妙度之和。两个超级和弦被认为是相同的,当且仅当这两个超级和弦所包含的音符集合是相同的。 
小Z决定创作一首由k个超级和弦组成的乐曲,为了使得乐曲更加动听,小Z要求该乐曲由k个不同的超级和弦组成。
我们定义一首乐曲的美妙度为其所包含的所有超级和弦的美妙度之和。小Z想知道他能够创作出来的乐曲美妙度最
大值是多少

算法标签:st表

思路:

对于以每个节点为左节点的区间,用st表求出最优的右区间,用优先队列维护,每次取出队首的同时,把区间以上一次最优点为分界分成两半继续进队列。

以下代码:

#include<bits/stdc++.h>
#define il inline
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
const int N=5e5+5;
struct node{int x,l,r,pos,v;friend bool operator<(node t1,node t2) {return t1.v<t2.v;}};
int n,k,L,R,sum[N],mx[N][20],Log[N];long long ans;priority_queue<node> q;
il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;}
il int Max(int x,int y){return sum[x]<sum[y]?y:x;}
il int query(int l,int r){int k=Log[r-l+1];return Max(mx[l][k],mx[r-(1<<k)+1][k]);}
int main()
{n=read();k=read();L=read();R=read();for(int i=1;i<=n;i++)sum[i]=sum[i-1]+read(),mx[i][0]=i;for(int i=2;i<=n;i++)Log[i]=Log[i>>1]+1;for(int j=1;j<=Log[n];j++)for(int i=1;i+(1<<j-1)<=n;i++)mx[i][j]=Max(mx[i][j-1],mx[i+(1<<(j-1))][j-1]);for(int i=1;i+L-1<=n;i++){int pos=query(i+L-1,min(i+R-1,n));q.push((node){i,i+L-1,min(i+R-1,n),pos,sum[pos]-sum[i-1]});}while(k--){node now=q.top();q.pop();ans+=now.v;int p;if(now.l<now.pos)p=query(now.l,now.pos-1),q.push((node){now.x,now.l,now.pos-1,p,sum[p]-sum[now.x-1]});if(now.pos<now.r)p=query(now.pos+1,now.r),q.push((node){now.x,now.pos+1,now.r,p,sum[p]-sum[now.x-1]});}printf("%lld\n",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/10193653.html

2018.12.28-bzoj-2006-[NOI2010]超级钢琴相关推荐

  1. bzoj 2006 [NOI2010]超级钢琴 rmq+堆

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 3708  Solved: 1846 [Submit][Sta ...

  2. BZOJ2006 [NOI2010]超级钢琴 【堆 + RMQ】

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MB Submit: 3446  Solved: 1692 [Submit][Sta ...

  3. [NOI2010]超级钢琴 主席树

    [NOI2010]超级钢琴 链接 luogu 思路 和12省联考的异或粽子一样. 堆维护n个左端点,每次取出来再放回去次 代码 #include <bits/stdc++.h> #defi ...

  4. NOI2010超级钢琴

    **NOI2010 超级钢琴** **Description** 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出 ...

  5. P2048 [NOI2010] 超级钢琴(ST表 + 优先队列优化)

    P2048 [NOI2010] 超级钢琴 题目 小 Z 是一个小有名气的钢琴家,最近 C 博士送给了小 Z 一架超级钢琴,小 Z 希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出 ...

  6. 贪心(数据结构):COGS 468. [NOI2010]超级钢琴

    ★★★☆   输入文件:piano.in   输出文件:piano.out   简单对比 时间限制:2 s   内存限制:512 MB 超级钢琴 [问题描述] 小Z是一个小有名气的钢琴家,最近C博士送 ...

  7. 日常作业2018.12.28

    作业 1.赌博游戏 package com.job12_1;import java.util.Scanner; /*** 赌博游戏* @author Administrator* 2018.12.26 ...

  8. 【一周头条盘点】中国软件网(2018.12.24~2018.12.28)

    每一个企业级应用的人都置顶了中国软件网 中国软件网为你带来最新鲜的行业干货 一周热点 网信办:金融信息服务提供者不得散布虚假金融信息 近日,国家网信办发布金融信息服务管理规定,规定明确,金融信息服务提 ...

  9. 洛谷 P2048 [NOI2010]超级钢琴(优先队列,RMQ)

    传送门 我们定义$(p,l,r)=max\{sum[t]-sum[p-1],p+l-1\leq t\leq p+r-1 \}$ 那么因为对每一个$p$来说$sum[p-1]$是一个定值,所以我们只要在 ...

  10. 2018.12.28

    关于细胞分化轨迹学习小笔记 学习工具 相关学习文章 学习框架 1.降维 2.轨迹算法 文章解读 一.Monocle2 1.流程 2. 方法 2.1 反转图嵌入 2.1.1定义 2.1.2优化公式 2. ...

最新文章

  1. Broadcast应用场景分析
  2. 2010 求后序遍历
  3. HTTPD(三)--HTTP2.4.9编译安装
  4. HTML网页模版/DTD有三种类型
  5. 27款经典网站设计必备的CSS框架
  6. phpcms v9 在当前栏目下获取父栏目与当前栏目的名称与连接
  7. SAP License:CO07利润中心必输
  8. C语言实现顺序表(数据结构)
  9. iPhone使用教程
  10. Yocto系列讲解[实战篇]44 - bb文件中函数实操演示(2)
  11. iptables设置映射通过外网端口代理ssh登录内网服务器
  12. StatusBar浅析
  13. Adobe Photoshop 自动化 脚本
  14. 3月16日---3月20日课程表
  15. Google 规避账户关联
  16. 撤消git stash pop导致合并冲突
  17. 微信小程序云开发-树洞小程序Treehole(评论帖子/发布话题实现)
  18. 计算机音乐制作专业大纲,电脑音乐制作教学大纲.doc
  19. Mac运行越来越慢的解决办法
  20. 在外国影响深远的家族,381年后回到中国认祖归宗,族谱:我是中国人

热门文章

  1. AI智能体学会动物进化法则:李飞飞等提出深度进化RL
  2. ​台媒:台积电2nm制程获重大突破
  3. 深度解析:国产化软硬件全景梳理
  4. 麦肯锡:企业数字化转型不要被技术“绑架”
  5. 传感器融合:自动驾驶领域的另一个突围方向
  6. 报告解读 | 智能技术“核聚变”催生智能经济,将拉动十万亿市场
  7. NLP 解决方案是如何被深度学习改写的?
  8. 拼多多程序员:因为看到同事被抬上救护车,我被开除了!
  9. 单行文字垂直/水平跑马灯效果
  10. Chapter 7. Testing and Debugging