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,那么必定会有人先上坡,再下坡, ...
随机推荐
- ubuntu16.04+opencv3.0.0
基本步骤: http://blog.csdn.net/xuezhisdc/article/details/48691797 报错: http://www.jianshu.com/p/68ac83436 ...
- HDU 2159 FATE 完全背包
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2159 FATE Time Limit: 2000/1000 MS (Java/Others)Memo ...
- pxe前期网络准备
核心交换机:[H3C12510-HEXIN]vlan 3010 //如果存在则不需要创建[H3C12510-HEXIN]dis interface Bridge-Aggregation brief / ...
- matlab的应用
MATLAB在信号与系统中的应用 一: 看到MATLAB在信号与系统中的应用,对这部分我比较熟悉,在此举一个小例子. impulse(sys)表示求连续系统sys的冲击响应 subplot ...
- 在Google Chrome中快速解除网页屏蔽鼠标右键、复制等限制
第一步,将书签栏设置为显示状态! 第二步,添加新书签——>在标签栏点击右键,选择“添加网页”. 第三步,设置新书签的内容. 1.起名.这个凭个人爱好吧 2.网址栏输入: javascript ...
- ESXi服务器遇到 IPMI_SI_DRV 的解决, 感谢原作者 以及今天 解决问题.
ESXI 服务器断电之后一直 LOADING MODULE IPMI_SI_DRV 的解决办法 今日家中忽然断电,之后 ESXi 服务器就一直疯狂转,连接显示器,发现原来一直没有启动.停留在ESXi ...
- Java多线程之ThreadLocal总结
原贴地址:http://www.cnblogs.com/zhengbin/p/5674638.html 阅读目录 官方对ThreadLocal的描述: <Thinking in Java> ...
- 隐藏基于Dialog的MFC的主窗体
最近需要做一个主窗体常态隐藏的程序,类似360卫士那样,只有托盘图标常显示.本以为隐藏主窗体很简单,但遇到了意想不到的情况. 无效的做法 最初的想法是设置主对话框资源的 Visiable 属性为 fa ...
- VM ware 中win2008 找不到网卡驱动的解决办法之一
在.vmx文件中用如下语句指定: ethernet0.virtualDev = "e1000" 其值为e1000指定网卡类型为Intel(R) PRO/1000(6.5默认为此项) ...
- Linux gcc和gdb程序调试用法 {转}
gcc一般调试格式: gcc -Wall -o test test.c // -wall 显示程序错误详细信息 gcc -v // 显示gcc的版本 gcc -o{1,2,3} t ...