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 ...
随机推荐
- KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析
案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...
- KingbaseES 数据库本地化配置 LC_CTYPE 和 LC_COLLATE
区域支持指的是应用遵守文化偏好的问题,包括字母表.排序.数字格式等.PostgreSQL使用服务器操作系统提供的标准 ISO C 和POSIX的区域机制.更多的信息请参考你的系统的文档. 概述 区域支 ...
- kettle通过SSH连接Mysql数据库(SSH隧道)
kettle通过SSH连接Mysql数据库(SSH隧道) Kettle无法直接连接使用SSH通道的MySQL,通过SSH隧道(推荐)或者需要借助工具PuTTY(不用时需要注销不推荐),具体操作如下所示 ...
- 配置Pod的 /etc/hosts
某些情况下,DNS 或者其他的域名解析方法可能不太适用,您需要配置 /etc/hosts 文件,在Linux下是比较容易做到的,在 Kubernetes 中,可以通过 Pod 定义中的 hostAli ...
- Docker Compose配置文件详解(V3)
Docker Compose配置文件是Docker Compose的核心,用于定义服务.网络和数据卷.格式为YAML,默认路径为./docker-compose.yml,可以使用.yml或.yaml扩 ...
- 记录阿里云安全组设置遇到的奇葩问题--出口ip
之前公司使用的路由器里使用的是PPPOE拨号的形式上网的,根据拨号后得到的ip地址,配置到阿里云的安全组里,具体来说是配置到22端口里,也就是说只有特定ip才能访问22端口,也即是说只允许公司网络远程 ...
- C++ 自学笔记 访问限制 Setting limits
Setting limits 让客户不能改,让设计者可以改 C++: 任何人访问 成员函数访问(同一个类的不同实例化对象可以相互访问私有成员变量) 类自己或子类访问 friend: 朋友就可以授权访问 ...
- Jupyter Notebook单元格加宽的方法3种
Jupyter Notebook的代码单元格比较窄,在我的屏幕上只占了一半都不到,网络搜索下,共找到3种加宽的方法,总结一下. (一)只改变当前Jupyter笔记本的单元格宽度 在Jupyter No ...
- Django 出现 frame because it set X-Frame-Options to deny 错误
一.背景 使用django3 进行开发时,由于项目前端页面使用iframe框架,浏览器错误提示信息如下 Refused to display 'http://127.0.0.1:8000/' in a ...
- 文件管理工具“三剑客” #Everything #SpaceSniffer #Clover
前言: 本文收集了我日常使用的三个文件管理工具: 文件搜索神器--Everything 磁盘文件占用分析工具--SpaceSniffer 文件资源管理器--Clover 下面我从工具解决的痛点和使用技 ...