题目:[NOI2010] 超级钢琴

前求出美妙值的前缀和,然后倍增处理一下前缀和的最大值,然后对于一个左端点s,他能取到右端点的只有s+l到s+r,而他的最大贡献就是s+l 到s+r的最大子段和,因此可以直接维护,然后用个堆维护总和最大值,这道题就做完了。

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
#define int long long
const int N=5e5+5;
using namespace std;
int n,m,L,R,f[N][20],a[N],sum[N],lg[N];
namespace ST
{
void init()
{
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
{
int s1=f[i][j-1],s2=f[i+(1<<(j-1))][j-1];
if(sum[s1]>=sum[s2])
f[i][j]=s1;
else
f[i][j]=s2;
}
}
int query(int l,int r)
{
int j=lg[r-l+1];
int s1=f[l][j],s2=f[r-(1<<j)+1][j];
if(sum[s1]>=sum[s2])
return s1;
else
return s2;
}
}
using namespace ST;
struct pos
{
int o,l,r,val,maxp;
pos(int oo,int ll,int rr)
{
o=oo;l=ll;r=rr;
maxp=query(l,r);
val=sum[maxp]-sum[o-1];
}
pos(){
}
friend bool operator < (pos a,pos b)
{
return a.val<b.val;
}
};
priority_queue <pos> q;
signed main()
{
scanf("%lld %lld %lld %lld",&n,&m,&L,&R);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
f[i][0]=i;
sum[i]=sum[i-1]+a[i];
}
for(int i=2;i<=n;i++)
lg[i]=lg[i>>1]+1;
init();
for(int i=1;i<=n;i++)
if(i+L-1<=n)
q.push(pos(i,i+L-1,min(i+R-1,n)));
int ret=0;
for(int i=1;i<=m;i++)
{
pos now=q.top();
q.pop();
ret+=now.val;
if(now.maxp-1>=now.l)
q.push(pos(now.o,now.l,now.maxp-1));
if(now.maxp+1<=now.r)
q.push(pos(now.o,now.maxp+1,now.r));
}
printf("%lld\n",ret);
return 0;
}

最新文章

  1. Hadoop 全分布模式 平台搭建
  2. struts2中jsp前台传值到后台action的方法(转)
  3. form 表单用php来跳转页面
  4. 再探Java基础——throw与throws
  5. 根据窗体自动调整控件及文本框记住上次填写内容Demo
  6. How many ways??(HDU 2157)
  7. CentOS 6.4 x64 zabbix 2.2.2 编译安装
  8. Eric的第一天
  9. 为SRS流媒体服务器添加HLS加密功能(附源码)
  10. Emacs Python 自动补全--Elpy
  11. Python基础:数据类型-字符串(7)
  12. IntelliJ IDEA安装ideaIU-2019.1
  13. vue引入外部.css文件,webpack将其与.vue中的样式混合打包了,怎么办?
  14. Spring Boot(一)
  15. Mac 上安装maven
  16. Vue源码
  17. 还在为工作发愁?学JavaScript吧
  18. Canvas文本操作
  19. [dig]使用dig查看当前网络连通情况
  20. Bus memory attribute

热门文章

  1. docker容器数据卷的使用
  2. 如何做raid级别磁盘(rhel和centos系统皆可)
  3. 类的常成员const
  4. 【一月一本技术书】-【MySQL是怎样运行的】- 8月
  5. Java中的Optional
  6. 传输层协议(tcp ip和udp 三次握手 四次握手)
  7. 腾讯云即时通信 IM 服务 实例项目
  8. Kibana:在Kibana中定制Regional Map
  9. 使用logstash同步mysql 多表数据到ElasticSearch实践
  10. Fluentd直接传输日志给Elasticsearch