2022春每日一题:Day 40


题目:[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;
}
2022春每日一题:Day 40的更多相关文章
- 老男孩IT教育-每日一题汇总
老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...
- 【Java每日一题】20170106
20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170105
20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170104
20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170103
20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20161230
// 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...
- 【Java每日一题】20161229
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1229 { public s ...
- 【Java每日一题】20161228
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...
- 【Java每日一题】20161227
package Dec2016; public class Ques1227 { public static void main(String[] args){ } { c = 1; } int c ...
- 【Java每日一题】20161226
package Dec2016; public class Ques1226 { static{ num = 1; } public static int num = 2; public static ...
随机推荐
- Linux网桥配置(用于大数据虚拟化)
理解 VMware里面有三个虚拟机,分别为RHEL8,RHEL7,Windows的虚拟机,只有一个物理网卡连接物理网络,现在三台虚拟机都需要直连到物理网络,此时无法访问物理网络,只能给一个虚拟机访问物 ...
- 性能调优——小小的log大大的坑
引言 "只有被线上服务问题毒打过的人才明白日志有多重要!" 我先说结论,谁赞成,谁反对?如果你深有同感,那恭喜你是个社会人了:) 日志对程序的重要性不言而喻,轻巧.简单.无需费脑, ...
- 在UniApp的H5项目中,生成二维码和扫描二维码的操作处理
在我们基于UniApp的H5项目中,需要生成一些二维码进行展示,另外也需要让用户可以扫码进行一定的快捷操作,本篇随笔介绍一下二维码的生成处理和基于H5的扫码进行操作.二维码的生成,使用了JS文件wea ...
- k8s ingress-nginx 使用 snippet 添加自定义配置 (比如:新增请求头)
比如在有些时候我们需要在 server 里或者 location 里添加一些参数,例如添加包体大小限制.添加跨域配置.添加自定义header.处理响应header等等.遇到这些需求的时候,我们开始怀念 ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...
- 在Portainer上管理其他docker主机(这只是其中一种方式),另一种方式看这个文档:使用Portainer管理其他主机的docker应用有两种方式
其他主机开启远程连接docker端口 需要设置一下2375端口的监听.通过修改docker配置文件方式进行监听. 修改配置文件修改监听端口 使用Centos7安装的docker,所以下面的配置是适用于 ...
- 12. Fluentd部署:多Workers进程模式
介绍如何使用Fluentd的多worker模式处理高访问量的日志事件.此模式会运行多个worker进程以最大利用多核CPU. 原理 默认情况下,一个Fluentd实例会运行一个监控进程和一个工作进程. ...
- 使用nginx部署Django静态文件配置
首先,我们配置静态文件,要在setting.py里面加入如下几行代码: # settings.py # the settings above # STATIC SETTINGS STATIC_URL ...
- aardio + PowerShell 可视化快速开发独立 EXE 桌面程序
aardio 可以方便地调用 PowerShell ,PowerShell 中也可以自由调用 aardio 对象与函数.不用带上体积很大的System.Management.Automation.dl ...
- 关于aws-Global区的新账户的一些限制坑点
在使用global-aws的时候,遇到几个限制坑点记录如下(都是需要发请求找aws服务支持才能提高) 1.关于Elastic IPs的限制,默认为 5,这样在ec2下的Elastic IPs中最多只能 ...