bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴
http://www.lydsy.com/JudgeOnline/problem.php?id=2006
输出最大的k个 sum[r]-sum[l-1] (L<=r-l+1<=R) 之和
当右端点固定不变时,左端点的前缀和越小越好
固定右端点r后,左端点的被限制在了区间[r-R,r-L]内
RMQ查出在这段左端点区间内,左端点前缀和的最小值
把所有的这些放到一个大根堆里
取出一个元素后
若原区间[a,b] 左端点选的位置是p
那么原区间分裂为两个区间[a,p-1] 和 [p+1,b]
即 若原来区间的右端点是End,左端点可选区间为[a,b]
那么当[a,b]内选位置p当左端点,且作为前k大用过后,
右端点为End的区间可选左端点变成了 [a,p-1],[p+1,b],放入堆中即可
#include<queue>
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 500001 struct node
{
int l,r;
int End;
int pos,val; bool operator < (node p) const
{
return val<p.val;
}
}nxt; priority_queue<node>q; int sum[N];
int mi[N][]; void read(int &x)
{
x=; int f=; char c=getchar();
while(!isdigit(c)) { if(c=='-') f=-; c=getchar(); }
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
x*=f;
} int find(int l,int r)
{
int k=log(r-l+)/log();
return sum[mi[l][k]]<sum[mi[r-(<<k)+][k]] ? mi[l][k] : mi[r-(<<k)+][k];
} int main()
{
freopen("piano.in","r",stdin);
freopen("piano.out","w",stdout);
int n,k,L,R;
read(n);
read(k);
read(L);
read(R);
for(int i=;i<=n;++i)
{
read(sum[i]);
sum[i]+=sum[i-];
mi[i][]=i;
}
for(int j=,k=;k<<<=n;++j,k<<=)
for(int i=;i+(k<<)-<=n;++i)
if(sum[mi[i][j-]]<sum[mi[i+k][j-]]) mi[i][j]=mi[i][j-];
else mi[i][j]=mi[i+k][j-];
node tmp;
for(int i=;i<=n;++i)
{
tmp.End=i;
tmp.l=max(i-R,);
tmp.r=i-L;
if(tmp.l>tmp.r) continue;
tmp.pos=find(tmp.l,tmp.r);
tmp.val=sum[i]-sum[tmp.pos];
q.push(tmp);
}
long long ans=;
while(k--)
{
tmp=q.top();
ans+=tmp.val;
q.pop();
nxt.End=tmp.End;
if(tmp.pos!=tmp.l)
{
nxt.pos=find(tmp.l,tmp.pos-);
nxt.l=tmp.l;
nxt.r=tmp.pos-;
nxt.val=sum[nxt.End]-sum[nxt.pos];
q.push(nxt);
}
if(tmp.pos!=tmp.r)
{
nxt.pos=find(tmp.pos+,tmp.r);
nxt.l=tmp.pos+;
nxt.r=tmp.r;
nxt.val=sum[nxt.End]-sum[nxt.pos];
q.push(nxt);
}
}
cout<<ans;
}
2006: [NOI2010]超级钢琴
Time Limit: 20 Sec  Memory Limit: 552 MB
Submit: 3473  Solved: 1714
[Submit][Status][Discuss]
Description
Input
Output
只有一个整数,表示乐曲美妙度的最大值。
Sample Input
3
2
-6
8
Sample Output
【样例说明】
共有5种不同的超级和弦:
音符1 ~ 2,美妙度为3 + 2 = 5 
音符2 ~ 3,美妙度为2 + (-6) = -4 
音符3 ~ 4,美妙度为(-6) + 8 = 2 
音符1 ~ 3,美妙度为3 + 2 + (-6) = -1 
音符2 ~ 4,美妙度为2 + (-6) + 8 = 4 
最优方案为:乐曲由和弦1,和弦3,和弦5组成,美妙度为5 + 2 + 4 = 11。
HINT
bzoj千题计划162:bzoj2006: [NOI2010]超级钢琴的更多相关文章
- bzoj2006 [NOI2010]超级钢琴 (及其拓展)
		
bzoj2006 [NOI2010]超级钢琴 给定一个序列,求长度在 \([L,\ R]\) 之间的区间和的前 \(k\) 大之和 \(n\leq5\times10^5,\ k\leq2\times1 ...
 - 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 ...
 - bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
		
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
 - 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个 ...
 - bzoj千题计划129:bzoj2007: [Noi2010]海拔
		
http://www.lydsy.com/JudgeOnline/problem.php?id=2007 1.所有点的高度一定在0~1之间, 如果有一个点的高度超过了1,那么必定会有人先上坡,再下坡, ...
 
随机推荐
- 【CS231N】6、神经网络动态部分:损失函数等
			
一.疑问 二.知识点 1. 损失函数可视化  损失函数一般都是定义在高维度的空间中,这样要将其可视化就很困难.然而办法还是有的,在1个维度或者2个维度的方向上对高维空间进行切片,例如,随机生成一个权 ...
 - 1003 我要通过!| PAT (Basic Level) Practice
			
1003 我要通过! (20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件 ...
 - 简单实现wc.exe软件基本功能
			
简单实现wc.exe软件基本功能 软件需求分析: 一.基本功能 支持 -c 统计字符数(char count) 支持 -w 统计单词数(word count) 支持 -l 统计总行数(line ...
 - angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程
			
官网上的解释为: The $http service is a core AngularJS service that facilitates communication with the remot ...
 - js数组遍历 千万不要使用for...in...
			
昨天做个下拉框 扩充了一下数组的方法 Array.prototype.remove = function (val) { var index = this.indexOf(val); if (inde ...
 - Few-Shot/One-Shot Learning
			
Few-Shot/One-Shot Learning指的是小样本学习,目的是克服机器学习中训练模型需要海量数据的问题,期望通过少量数据即可获得足够的知识. Matching Networks for ...
 - vue中的数据双向绑定
			
学习的过程是漫长的,只有坚持不懈才能到达到自己的目标. 1.vue中数据的双向绑定采用的时候,数据劫持的模式.其实主要是用了Es5中的Object.defineProperty;来劫持每个属性的get ...
 - 关于vue项目管理项目的架构管理平台
			
关于vue项目管理项目的架构管理平台 https://panjiachen.github.io/vue-element-admin-site/#/zh-cn/faq 31.4k 次浏览 完整项目地址: ...
 - java的日志知识
			
java常用的日志有以下几种 : 一.jdk自带的java.util.logging包下的日志功能, 不常用. 二.commons-logging + log4j 的搭配 .log4j是日志功能的具 ...
 - 惭愧, eclipse 之 build path
			
算下来大学到现在已近用了很久的 eclipse 了, 包括 myeclipse, 但是今天碰到的问题让我很惭愧, 一个老项目的编译都搞了好久. 环境: Myeclipse 6.X Struts 1.X ...