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

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

Input

第一行包含四个正整数n, k, L, R。其中n为音符的个数,k为乐曲所包含的超级和弦个数,L和R分别是超级和弦所
包含音符个数的下限和上限。 接下来n行,每行包含一个整数Ai,表示按编号从小到大每个音符的美妙度。
N<=500,000
k<=500,000
-1000<=Ai<=1000,1<=L<=R<=N且保证一定存在满足条件的乐曲

Output

只有一个整数,表示乐曲美妙度的最大值。

Sample Input

4 3 2 3
3
2
-6
8

Sample Output

11

【样例说明】
共有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]超级钢琴的更多相关文章

  1. bzoj2006 [NOI2010]超级钢琴 (及其拓展)

    bzoj2006 [NOI2010]超级钢琴 给定一个序列,求长度在 \([L,\ R]\) 之间的区间和的前 \(k\) 大之和 \(n\leq5\times10^5,\ k\leq2\times1 ...

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

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

  3. [BZOJ2006][NOI2010]超级钢琴(ST表+堆)

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 3679  Solved: 1828[Submit][Statu ...

  4. [BZOJ2006] [NOI2010]超级钢琴 主席树+贪心+优先队列

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 3591  Solved: 1780[Submit][Statu ...

  5. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  6. bzoj2006 noi2010 超级钢琴 主席树 + 优先队列

    Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2435  Solved: 1195 Description 小 Z是一个小有名气的钢琴家,最近C博士送 ...

  7. BZOJ2006[NOI2010]超级钢琴——堆+主席树

    题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中 ...

  8. 【贪心 计数】bzoj2006: [NOI2010]超级钢琴

    这么经典的贪心我怎么现在才做啊…… Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐. 这架超级钢琴可以弹奏出n个 ...

  9. bzoj千题计划129:bzoj2007: [Noi2010]海拔

    http://www.lydsy.com/JudgeOnline/problem.php?id=2007 1.所有点的高度一定在0~1之间, 如果有一个点的高度超过了1,那么必定会有人先上坡,再下坡, ...

随机推荐

  1. 作业45//Calculator::3.0

    计算器 github 我的天我到底要写什么 一,2.0及2.6的改动 做了计算部分 加入了判断输入是否合法 合法的定义是算式符合`数字+运算符+数字+运算符+数字`的格式 其中`"-&quo ...

  2. angularJS1笔记-(6)-自定义过滤器

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  3. Xcode7~8版本过渡导致的问题

    现有项目是早期Xcode7编写的,一直到现在还是使用Xcode7编写.近期一位用户手机下载App出现闪退现象,该用户手机系统(iPhone 6 iOS8.1.2)经查实是由于CoreFoundatio ...

  4. 微信之父张小龙经典演讲164页PPT:《微信背后的产品观》

    收藏地址:http://www.haokoo.com/internet/8974068.html

  5. EJB是什么

    EJB (enterprise java bean)   EJB 概念的剖析 我们先看一下,EJB 的官方解释: 商务软件的核心部分是它的业务逻辑.业务逻辑抽象了整个商务过程的流程,并使用计 算机语言 ...

  6. jquery on 事件嵌套 事件执行多次

    今天做了个项目,就是想点击添加然后追加一列,点击这一列的修改按钮,在修改, //编辑事件 $('#eventTable').on('click','.edit_n',function(){ var i ...

  7. Unity3d学习日记(六)

      今天在研究怎么在unity中将image上的图片保存到本地,主要参考下面两个链接:Unity Texture2D缩放.UNITY存储图片到本地   结合上述两个链接,我写了如下代码来将缩放后或者改 ...

  8. Centos7 django+uwsgi+nginx+python3.6.8部署

    安装依赖 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-d ...

  9. HHVM 3.0 发布,执行 PHP 的虚拟机

    HHVM 详细介绍 HipHop VM(HHVM)是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT(Just-In- Time)编译器,同时具有产生快速代码和即时编译的优点. ...

  10. Android 目录结构

    Android目录结构中,values目录下对应的是应用程序所需要的数据,网上看到了一个包含values-v11等values-*的写法. 是为了进行分辨率的自适应????????? 因为还没有涉及到 ...