【BZOJ2006】【NOI2010】超级钢琴
题意:
Description
Input
Output
只有一个整数,表示乐曲美妙度的最大值。
题解:
貌似是此类套路题的开端?
一看到前k大很明显就是要用大根堆(优先队列)来维护,取k次堆顶即可。
区间求和可以转化为前缀和差分,那么对于一个左端点i,能找到的最优的右端点j就是在区间$[i-1+L,i-1+R]$中$pre[j]$最大的j;
显然是RMQ问题,用ST表可以做到$O(1)$
用一个四元组$(i,t,l,r)$来表示一个超级和弦,表示左端点是i,右端点区间为$[l,r]$,最优右端点为t;
先加入初始的n个最优的和弦,每次取完堆顶把右端点区间以t为中心分裂成两个重新加入队列,统计答案即可。
注意最后的答案要用longlong
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
using namespace std;
typedef long long ll;
int n,k,l,r,a[],pre[],lg[],st[][];
ll ans;
struct node{
int t1,t2,l,r;
friend bool operator <(node x,node y){
return pre[x.t2]-pre[x.t1-]<pre[y.t2]-pre[y.t1-];
}
};
priority_queue<node>q;
int query(int l,int r){
if(l==r)return l;
return (pre[st[l][lg[r-l+]]]>pre[st[r-(<<lg[r-l+])+][lg[r-l+]]])?st[l][lg[r-l+]]:st[r-(<<lg[r-l+])+][lg[r-l+]];
}
int main(){
scanf("%d%d%d%d",&n,&k,&l,&r);
lg[]=;
for(int i=;i<=n;i++)lg[i]=lg[i>>]+;
for(int i=;i<=n;i++)st[i][]=i;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
pre[i]=pre[i-]+a[i];
}
for(int j=;j<=;j++){
for(int i=;i+(<<j)-<=n;i++){
st[i][j]=(pre[st[i][j-]]>pre[st[i+(<<j-)][j-]])?st[i][j-]:st[i+(<<j-)][j-];
}
}
for(int i=;i<=n;i++){
if(i+l-<=n){
q.push((node){i,query(i+l-,min(i+r-,n)),i+l-,min(i+r-,n)});
}
}
for(int i=;i<=k;i++){
node now=q.top();
q.pop();
ans+=pre[now.t2]-pre[now.t1-];
if(now.t2->=now.l)q.push((node){now.t1,query(now.l,now.t2-),now.l,now.t2-});
if(now.t2+<=now.r)q.push((node){now.t1,query(now.t2+,now.r),now.t2+,now.r});
}
printf("%lld",ans);
return ;
}
【BZOJ2006】【NOI2010】超级钢琴的更多相关文章
- bzoj2006 [NOI2010]超级钢琴 (及其拓展)
bzoj2006 [NOI2010]超级钢琴 给定一个序列,求长度在 \([L,\ R]\) 之间的区间和的前 \(k\) 大之和 \(n\leq5\times10^5,\ k\leq2\times1 ...
- bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴
http://www.lydsy.com/JudgeOnline/problem.php?id=2006 输出最大的k个 sum[r]-sum[l-1] (L<=r-l+1<=R) 之和 ...
- BZOJ2006 [NOI2010]超级钢琴 【堆 + RMQ】
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MB Submit: 3446 Solved: 1692 [Submit][Sta ...
- [BZOJ2006][NOI2010]超级钢琴(ST表+堆)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 3679 Solved: 1828[Submit][Statu ...
- [BZOJ2006] [NOI2010]超级钢琴 主席树+贪心+优先队列
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 3591 Solved: 1780[Submit][Statu ...
- bzoj2006 noi2010 超级钢琴 主席树 + 优先队列
Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2435 Solved: 1195 Description 小 Z是一个小有名气的钢琴家,最近C博士送 ...
- BZOJ2006[NOI2010]超级钢琴——堆+主席树
题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中 ...
- 【贪心 计数】bzoj2006: [NOI2010]超级钢琴
这么经典的贪心我怎么现在才做啊…… Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐. 这架超级钢琴可以弹奏出n个 ...
- BZOJ2006——[NOI2010]超级钢琴
1.题意:给一个序列,让你取出k个不同的区间,要求长度在之间,问所有区间和的最大值 2.分析:这道题拿过来就能知道是要拿出前k个最大的区间,我们思考最暴力的做法,就是把这个所有的区间枚举出来算,取出前 ...
- bzoj2006: [NOI2010]超级钢琴
题意:给一个序列(n<=500000),要求选定k个不同区间,使得区间长度在L,R之间,并使得k个区间和之和最大,输出这个最大值. 刚拿到题的时候想的是,对于每个点,如果以它开头,那么之后的L- ...
随机推荐
- ZBrush软件特性之Edit
ZBrush®中的Edit调控板控制撤销和重做命令,它有一或两个命令设置将根据Tool工具调控板当前选择的工具而定,默认配置的命令仅有文档编辑,不过当激活一个3D工具,只针对这个工具的两个按钮设置变成 ...
- java中端口号被占用的解决办法
第一步,命令提示符号,执行命令:netstat -ano 可见,占用1099端口的进程的PID是10460. 第二步,命令提示符号,执行命令:tasklist(通过pid 10460定位) 可见,该占 ...
- Linux(1)---常用命令
1.将tgz文件解压到指定目录: # tar zxvf test.tgz -C 指定目录 比如将 /lyl/test.tgz解压到 /lyl/linux 目录下 # tar zxvf /lyl/tes ...
- navicat连接SQL Sever数据库出现的问题
1.navicat 连接sqlserver提示要安装 sql server native client 解决办法:在navicat安装目录下有个sqlncli_x64.msi文件,双击安装一直下一步就 ...
- 华硕VX50V开机老是进入bios
问题:华硕VX50V开机老是进入bios 如图: 解决办法: 1.将 Boot 中的--->> Lunch CSM ---->>设置为 -->> ena ...
- RabbitMQ学习总结(2)——安装、配置与监控
一.安装 1.安装Erlang 1)系统编译环境(这里采用linux/unix 环境) ① 安装环境 虚拟机:VMware® Workstation 10.0.1 build Linux系统:Cent ...
- MySQL高可用系列之MHA(二)
一.參数说明 MHA提供了一系列配置參数.深入理解每一个參数的详细含义,对优化配置.合理使用MHA非常重要.非常多高可用性也都是通过合理配置一些參数而实现的. MHA包含例如以下配置參数,分别说明例如 ...
- java基础之get和post的差别
上篇博文讲到HTTP协议,本篇介绍HTTP请求方法中get和post的差别: 首先,最明显的一点表象上的差别:GET 方式.将请求參数附加在url之后,POST将请求參数附加在请求头的最后 以下具体说 ...
- JavaScript常用的api
打印日志 console.log 类型判断 第一种方式var type = Object.prototype.toString.call(list);console.log(type);第二种方式ty ...
- m_Orchestrate learning system---十八、mo项目的启示是什么
m_Orchestrate learning system---十八.mo项目的启示是什么 一.总结 一句话总结:多看教程,体统看教程的学, 完全不懂的话百度的作用也不大 多学点,可以节约后面的超多时 ...