BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
Description
Input
Output
只有一个整数,表示乐曲美妙度的最大值。
Sample Input
3
2
-6
8
Sample Output
11
把所有的子串当成后缀的前缀来做。
那么对于从i这个位置开始的子串,有一个可以选取末位置j的范围[i+L-1,i+R-1]。
假设最大的合法子串在j这个位置,那么次大值一定出现在[i+L-1,j-1]和[j+1,i+R-1]中。
于是有了这样的想法:用堆来维护四元组<i,p,l,r>表示从i到p的子段,选择的范围从l到r。
然后每次查询区间最大值用ST表做即可。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <ext/pb_ds/priority_queue.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
#define N 500050
int n,a[N],s[N],K,L,R,f[N][21],Lg[N],g[N][21];
ll ans;
struct A {
int x,p,l,r;
A() {}
A(int x_,int p_,int l_,int r_) :
x(x_),p(p_),l(l_),r(r_) {}
};
bool operator < (const A &x,const A &y) {
return s[x.p]-s[x.x-1]<s[y.p]-s[y.x-1];
}
__gnu_pbds::priority_queue<A>q;
int get_max(int l,int r) {
int len=Lg[r-l+1];
return f[l][len]>f[r-(1<<len)+1][len]?g[l][len]:g[r-(1<<len)+1][len];
}
void solve() {
int i;
for(i=1;i<=n-L+1;i++) {
int t=get_max(i+L-1,min(n,i+R-1));
q.push(A(i,t,i+L-1,min(n,i+R-1)));
}
for(i=1;i<=K;i++) {
A t=q.top(); q.pop();
//printf("%d %d\n",t.x,t.p);
ans+=s[t.p]-s[t.x-1];
if(t.p>t.l) q.push(A(t.x,get_max(t.l,t.p-1),t.l,t.p-1));
if(t.p<t.r) q.push(A(t.x,get_max(t.p+1,t.r),t.p+1,t.r));
}
}
int main() {
scanf("%d%d%d%d",&n,&K,&L,&R);
int i,j;
Lg[0]=-1;
for(i=1;i<=n;i++) {
scanf("%d",&a[i]);
s[i]=s[i-1]+a[i];
f[i][0]=s[i];
g[i][0]=i;
Lg[i]=Lg[i>>1]+1;
}
Lg[0]=0;
for(j=1;(1<<j)<=n;j++) {
for(i=1;i+(1<<j)-1<=n;i++) {
if(f[i][j-1]>f[i+(1<<j-1)][j-1]) {
f[i][j]=f[i][j-1];
g[i][j]=g[i][j-1];
}else {
f[i][j]=f[i+(1<<j-1)][j-1];
g[i][j]=g[i+(1<<j-1)][j-1];
}
}
}
solve();
printf("%lld\n",ans);
}
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表的更多相关文章
- P2048 [NOI2010]超级钢琴(RMQ+堆+贪心)
P2048 [NOI2010]超级钢琴 区间和--->前缀和做差 多次查询区间和最大--->前缀和RMQ 每次取出最大的区间和--->堆 于是我们设个3元组$(o,l,r)$,表示左 ...
- 【NOI2010】超级钢琴 题解(贪心+堆+ST表)
题目链接 题目大意:求序列内长度在$[L,R]$范围内前$k$大子序列之和. ---------------------- 考略每个左端点$i$,合法的区间右端点在$[i+L,i+R]$内. 不妨暴力 ...
- [NOI2010]超级钢琴(RMQ+堆)
小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中Ai可正可负 ...
- [NOI2010] 超级钢琴 - 贪心,堆,ST表
这也算是第K大问题的套路题了(虽然我一开始还想了个假算法),大体想法就是先弄出最优的一批解,然后每次从中提出一个最优解并转移到一个次优解,用优先队列维护这个过程即可. 类似的问题很多,放在序列上的,放 ...
- BZOJ 2006 NOI2010 超级钢琴 划分树+堆
题目大意:给定一个序列.找到k个长度在[l,r]之间的序列.使得和最大 暴力O(n^2logn),肯定过不去 看到这题的第一眼我OTZ了一下午... 后来研究了非常久别人的题解才弄明确怎么回事...蒟 ...
- [BZOJ2006][NOI2010]超级钢琴(ST表+堆)
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 3679 Solved: 1828[Submit][Statu ...
- [ST表/贪心] NOI2010 超级钢琴
[NOI2010]超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i ...
- Bzoj 2006: [NOI2010]超级钢琴 堆,ST表
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2222 Solved: 1082[Submit][Statu ...
- 【BZOJ2006】[NOI2010]超级钢琴 ST表+堆
[BZOJ2006][NOI2010]超级钢琴 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以 ...
随机推荐
- webpack安装使用
一.安装 1.安装node.js,Webpack 需要 Node.js v0.6 以上支持 2.使用npm(软件包管理 )安装webpack (1)全局安装 npm install webpac ...
- spring boot + quartz 集群
spring boot bean配置: @Configuration public class QuartzConfig { @Value("${quartz.scheduler.insta ...
- JAVA程序员面试宝典
程序员面试之葵花宝典 面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...
- Apache Flink Quickstart
Apache Flink 是新一代的基于 Kappa 架构的流处理框架,近期底层部署结构基于 FLIP-6 做了大规模的调整,我们来看一下在新的版本(1.6-SNAPSHOT)下怎样从源码快速编译执行 ...
- How to change from default to alternative Python version on Debian Linux
https://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux You ...
- RA layer request failed
新整的Eclipse环境出现这个问题,细化内容是不能connect,后来想起切换Eclipse底层库的事情,然后打开Eclipse的SVN设置.把SVN Client借口由JavaHL改为PureJa ...
- git添加本地的项目到git远程管理仓库
目标:将本地存在的项目添加到git远程仓库管理 步骤: 1. 需要一个git远程仓库管理地址 例如:https://github.com/xingfupeng/test.git git@github. ...
- nodejs环境 + 入门 + 博客搭建
NodeJS:NodeJS是一个使用了Google高性能V8 引擎 的服务器端JavaScript实现.它提供了一个(几乎)完全非阻塞I/O栈,与JavaScript提供的闭包和匿名函数相结合,使之成 ...
- html 标签内联元素和块元素分类【转】
常见的块状元素与内联元素 块状元素 内联元素 address - 地址 blockquote - 块引用 center - 居中对齐 dir - 目录列表 div - 常用块级容易,也是CSS lay ...
- Django rest framework(6)----序列化
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...