/*
自己yy的奇葩做法居然A了23333
不过空间好像很大 时间好像略慢.....
毕竟不是正解
前缀维护sum值 枚举区间起点
然后终点的坐标可以确定在一个范围
可持久化线段树查询区间第1大
然后放到堆里 注意每个从堆里取出来再把这个区间第2大的放进去
这里k可能减成负的 注意特判 开始wa了
还有开longlong
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
#define pa pair<int,int>
#define mk make_pair
#define maxn 500010
using namespace std;
int n,m,l,r,k,x,root[maxn],a[maxn],s[maxn],cnt[maxn],tot;
long long ans;
struct node{
int sum,lc,rc;
}t[maxn**];
priority_queue<pa>q;
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int Build(int S,int L,int R){
++tot;t[tot].sum=S;
t[tot].lc=L;t[tot].rc=R;
return tot;
}
void Insert(int &root,int pre,int l,int r,int pos){
root=Build(t[pre].sum+,t[pre].lc,t[pre].rc);
if(l==r)return;
int mid=l+r>>;
if(pos<=mid)Insert(t[root].lc,t[pre].lc,l,mid,pos);
else Insert(t[root].rc,t[pre].rc,mid+,r,pos);
}
int Query(int L,int R,int l,int r,int k){
if(l==r)return l;
int mid=l+r>>;
int sum=t[t[R].lc].sum-t[t[L].lc].sum;
if(k<=sum)return Query(t[L].lc,t[R].lc,l,mid,k);
else return Query(t[L].rc,t[R].rc,mid+,r,k-sum);
}
int main()
{
freopen("piano.in","r",stdin);
//freopen("piano.out","w",stdout);
n=init();k=init();l=init();r=init();
for(int i=;i<=n;i++){
x=init();
s[i]=s[i-]+x;
a[i]=s[i];
}
int num,pos,L,R,p,len,t;
sort(a+,a++n);
num=unique(a+,a++n)-a-;
for(int i=;i<=n;i++){
pos=lower_bound(a+,a++num,s[i])-a;
Insert(root[i],root[i-],,num,pos);
}
while(!q.empty())q.pop();
for(int i=;i+l-<=n;i++){
L=i+l-,R=min(n,i+r-);
len=R-L+;++cnt[i];t=len-cnt[i]+;
pos=Query(root[L-],root[R],,num,t);
q.push(mk(a[pos]-s[i-],i));
}
for(int i=;i<=k;i++){
p=q.top().second;
ans+=q.top().first;q.pop();
L=p+l-,R=min(n,p+r-);
len=R-L+;++cnt[p];t=len-cnt[p]+;
if(t<=)continue;
pos=Query(root[L-],root[R],,num,t);
q.push(mk(a[pos]-s[p-],p));
}
cout<<ans<<endl;
return ;
}

超级钢琴 2010年NOI的更多相关文章

  1. [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)

    [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...

  2. [NOI 2010]超级钢琴

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

  3. 题解 【NOI2010】超级钢琴

    [NOI2010]超级钢琴 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号 ...

  4. BZOJ 2006: [NOI2010]超级钢琴

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

  5. 【BZOJ-2006】超级钢琴 ST表 + 堆 (一类经典问题)

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

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

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

  7. 2006: [NOI2010]超级钢琴 - BZOJ

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

  8. Bzoj 2006: [NOI2010]超级钢琴 堆,ST表

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

  9. NOI2010超级钢琴 2

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 1296  Solved: 606[Submit][Status ...

随机推荐

  1. unix 环境高级编程 读书笔记与习题解答第四篇

    第一章 第六节 第一小节 这一章没有程序设计和API方面的深入学习,而是注重介绍了unix操作系统中的原始数据类型和系统原型函数,错误处理方面的知识. ____unistd.h____ 该文件包含了u ...

  2. 查看Oracle是否锁表

    --Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容. --(1)锁表查询的代码有以下的形式: select ...

  3. 完美世界-2015校园招聘-java服务器工程师-成都站

    给定一个整数,将该整数分解成多个2的幂次方相加的形式,每次都取最大的可以分解出来的2的幂次方 比如 65 64 1 1 1 2 2 package wanmanshijie; import java. ...

  4. db2索引创建和删除

    在表trpt_jv_rpt_log_td的tim列上创建索引 create index dw_rpt.irpt_jv_rpt_log_td_tim on dw_rpt.trpt_jv_rpt_log_ ...

  5. JAVA NIO 简介(转)

    1.   基本 概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执行 I/O 较高级 ...

  6. Light OJ 1021 - Painful Bases(状态压缩DP)

    题目大意: 给你一个base 进制的数字,把这个数字的每一位进行全排列,问有多少个数字是可以整除k的. 题目解析: #include<cstdio> #include<cstring ...

  7. (转载)HTML--- input type=hidden

    (转载)http://www.blogjava.net/lansky07/archive/2007/04/05/108740.html HTML--- input type=hidden 关于< ...

  8. delphi NativeXml的中文支持 乱码

    一般XML的编码格式设置成UTF8比较通用,下面演示使用UTF8编码方式存储和处理包含中文的XML字符串(文件).1.设置启用内置的widestring支持 NativeXml内部使用ANSI str ...

  9. CodeForces 689A -Mike and Cellphone

    题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=412142 题目大意: 给定一个0-9数字键盘,随后输入一个操 ...

  10. 动态规划——E (LIS())最长上升子序列

    E - LIS Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Stat ...