zoukankan      html  css  js  c++  java
  • 【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)重新放回优先队列;

           

  • 相关阅读:
    GOF23设计模式之建造者模式
    GOF23设计模式之工厂模式
    GOF23设计模式之单例模式
    服务端字节流输出图片
    小记常见的会话跟踪技术
    Java生成随机数的三种方式
    因为new Date(),我给IE跪了
    ionic初体验
    cordova开发环境搭建
    gradle环境搭建
  • 原文地址:https://www.cnblogs.com/Paul-Guderian/p/10092804.html
Copyright © 2011-2022 走看看