【bzoj2006】【NOI2015】超级钢琴

2006: [NOI2010]超级钢琴

Time Limit: 20 Sec  Memory Limit: 512 MB
Submit: 4292  Solved: 2195
[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

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

题解:

       就是求长度在[L,R]之内的前n大区间的和;

         维护前缀和sum[i] – sum[j]   (j<i , L<=i-j<=R ) 的前n大;

         有L,R的限制,设计状态(i,j,k)表示可以选取的值为sum[i] – sum[j –> k] , sum[i]一定,可以用rmq得到此时的最大值,对于所有右端点i把(i,i-R,i-L) 一起丢进优先队列里面,每次取出最大值,如果选中了(i,j,k),且最大值为sum[i]-sum[p] ,就把(i,j,p-1),(i,p+1,k)重新放回优先队列;

       

posted @ 2018-12-09 19:41  大米饼  阅读(190)  评论(0编辑  收藏  举报