P2048 [NOI2010] 超级钢琴(纪念紫题)

news2024/11/15 19:50:27

原题

题面

在这里插入图片描述

具体实现讲解

首先想到用 s u m sum sum记录 a a a数组的前缀和,把每种和弦都试一遍,很明显会超时。
定义 c a l ( s , l , r ) cal(s,l,r) cal(s,l,r)代表以 s s s为左端点,右端点在 l l l r r r的范围内,能得到的最大和弦美妙度。对于一个右端点 p p p,美妙度为 s u m p − s u m s − 1 sum_p-sum_{s-1} sumpsums1 s u m s − 1 sum_{s-1} sums1确定,只要求 s u m p sum_p sump的最大值,于是用 S T ST ST表维护 s u m sum sum R M Q RMQ RMQ(最大值)。
用优先队列维护 c a l ( s , l , r ) cal(s,l,r) cal(s,l,r)的最大值,只需要取出 k k k个,就可以得到答案。初始时放入所有 c a l ( i , i + L − 1 , i + R − 1 ) cal(i,i+L-1,i+R-1) cal(i,i+L1,i+R1),由于可能出现两个被选中的和弦位于同一个起点,在取出 c a l ( s , l , r ) cal(s,l,r) cal(s,l,r)后要放入 c a l ( s , l , p s − 1 ) cal(s,l,ps-1) cal(s,l,ps1) c a l ( s , p s + 1 , r ) cal(s,ps+1,r) cal(s,ps+1,r) p s ps ps为取到最大的 s u m sum sum的位置)。
S T ST ST表不仅要维护最大值,还要维护最大值的位置; c a l cal cal同样需要返回最优解位置,可以将返回类型定为pair<int,int>;优先队列中的节点要用结构体存储( s s s l l l r r r p s ps ps v a l val val),重载运算符 < < < 即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define maxlog 19
int n,k,L,R,a[500005],sum[500005],Log[500005],cnt;
pair<int,int> ST[500005][20];
long long ans;
struct node{
	int s,l,r,val,ps;
	bool operator < (const node &x) const{ return val<x.val; }
	//priority_queue默认为大根堆,所以return val<x.val
} t;
priority_queue<node,vector<node> > q;
pair<int,int> cal(int s,int l,int r){
	int k=Log[r-l+1];
	if(ST[l][k]>ST[r-(1<<k)+1][k])
		return make_pair(ST[l][k].first-sum[s-1],ST[l][k].second);
	else return make_pair(ST[r-(1<<k)+1][k].first-sum[s-1],ST[r-(1<<k)+1][k].second);
}
int main(){
	scanf("%d%d%d%d",&n,&k,&L,&R);
	Log[1]=0;
	for(int i=2;i<=n;i++) Log[i]=Log[i/2]+1;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
		ST[i][0].first=sum[i];ST[i][0].second=i;
	}
	for(int j=1;j<=maxlog;j++)
		for(int i=1;i+(1<<j)-1<=n;i++){
			if(ST[i][j-1].first>ST[i+(1<<j-1)][j-1].first) ST[i][j]=ST[i][j-1];
			else ST[i][j]=ST[i+(1<<(j-1))][j-1];
		}
	for(int i=1;i+L-1<=n;i++){
		t.s=i,t.l=i+L-1,t.r=min(i+R-1,n);
		pair<int,int> p=cal(t.s,t.l,t.r);
		t.val=p.first,t.ps=p.second;
		q.push(t);
	}
	while(!q.empty()&&cnt<k){
		t=q.top();q.pop();
//		cout<<t.s<<' '<<t.l<<' '<<t.r<<' '<<t.val<<' '<<t.ps<<endl;
		ans+=t.val;cnt++;
		int p=t.ps,tr=t.r,tl=t.l;
		if(p>tl){
			t.r=p-1;
			pair<int,int> pp=cal(t.s,t.l,t.r);
			t.val=pp.first,t.ps=pp.second;
			q.push(t);
		}
		if(p<tr){
			t.l=p+1;t.r=tr;
			pair<int,int> pp=cal(t.s,t.l,t.r);
			t.val=pp.first,t.ps=pp.second;
			q.push(t);
		}
	}
	printf("%lld\n",ans);
	return 0;
}

此文主要用于纪念,如果讲解不够详细,可以转至洛谷题解,大佬很多。(我也是看了题解才做出来的)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css:grid的使用(部分)

一&#xff1a;grid的使用&#xff08; 平分宽度 &#xff09; <template><view class""><view class"main"><view class"main-item">1</view><view class"main-item">2</view><view cl…

Can ‘t connect to local MySQL server through socket ‘/tmp/mysql.sock ‘(2) “;

Can t connect to local MySQL server through socket /tmp/mysql.sock (2) "; 目录 Can t connect to local MySQL server through socket /tmp/mysql.sock (2) "; 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到…

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#xff08;含分析过程&#xff09; 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#x…

118页|2023大模型落地应用案例集

大语言模型开放平台旨在为大语言模型技术的研究和应用提供一个开放、可扩展、可协作的环境。该平台不仅为开发者提供大型语言模型、大规模数据集、模型微调工具以及大型语言模型应用开发工具等资源&#xff0c;还加速了大型语言模型的训练过程&#xff0c;促进了大型语言模型在…

论文复现丨带时间窗和服务顺序的多车辆路径问题:联合优化遗传算法

路径优化系列文章&#xff1a; 1、路径优化历史文章2、路径优化丨带时间窗和载重约束的CVRPTW问题-改进遗传算法&#xff1a;算例RC1083、路径优化丨带时间窗和载重约束的CVRPTW问题-改进和声搜索算法&#xff1a;算例RC1084、路径优化丨复现论文-网约拼车出行的乘客车辆匹配及…

Linux命令行 复制模式/扩展模式 调用系统功能切换

问题背景 公司软件需要从window 适配国产操作系统&#xff0c;目前使用wine方案。在我们软件有个切换屏幕模式的功能&#xff0c;需要支持用户在我们软件内&#xff0c;切换复制模式/扩展模式。 在linux 下 uos/deepin 等系统。如果要从复制模式设置为扩展模式使用命令行时&a…

零基础入门转录组数据分析——机器学习算法之SVM-RFE(筛选特征基因)

零基础入门转录组数据分析——机器学习算法之SVM-RFE&#xff08;筛选特征基因&#xff09; 目录 零基础入门转录组数据分析——机器学习算法之SVM-RFE&#xff08;筛选特征基因&#xff09;1. SVM-RFE基础知识2. SVM-RFE&#xff08;Rstudio&#xff09;——代码实操2. 1 数据…

从零到一:用Go语言构建你的第一个Web服务

使用Go语言从零开始搭建一个Web服务&#xff0c;包括环境搭建、路由处理、中间件使用、JSON和表单数据处理等关键步骤&#xff0c;提供丰富的代码示例。 关注TechLead&#xff0c;复旦博士&#xff0c;分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、…

【Git-驯化】一文搞懂git中rm命令的使用技巧

【Git-驯化】一文搞懂git中rm命令的使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xff1a;微信公…

Day12--Servlet实现前后端交互(案例:学生信息管理系统登录页面)

&#xff08;在一个完整的项目架构中&#xff0c;servlet的角色和位置&#xff09; Servlet、GenericServlet和HttpServlet三者之间的关系是Java Web开发中的一个重要概念&#xff0c;它们共同构成了基于Java的服务器端程序的基础。以下是具体分析&#xff1a; 1. Servlet接口…

Windows下nmap命令及Zenmap工具的使用方法

一、Nmap简介 nmap是一个网络连接端扫描软件&#xff0c;用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端&#xff0c;并且推断计算机运行哪个操作系统&#xff08;这是亦称 fingerprinting&#xff09;。它是网络管理员必用的软件之一&#xff0c;以及用以评…

算法-DFS-树形DP

题目一 解题思路 比较标准的深搜&#xff0c;难点主要在题目的理解&#xff0c;通俗的说就是要找到一个树结构中的点&#xff0c;使之在去掉该点后剩余数的结构最均等&#xff08;剩余连接节点的最大值最小&#xff09;。 无向图邻接表 使用代码实现需要一个数组存储数值、一…

速看!2024年5月软考通过率解析

根据湖南省工业和信息化厅最新发布的《2024年上半年软考湖南考区工作总结报告》及《考试安全顺利完成的通报》&#xff0c;我们了解到湖南地区在2024年上半年度的软件与信息技术专业人才考试&#xff08;简称“软考”&#xff09;中&#xff0c;报名人数达到了13,762人&#xf…

无人机1公里WiFi图传遥控模组,飞睿智能无延迟传输方案,高效稳定告别卡顿

在信息众多的时代&#xff0c;我们享受着科技带来的便利&#xff0c;同时也期待着更多前沿技术的出现。今天&#xff0c;就让我们一起走进一个充满神秘与可能性的领域——飞睿智能1公里WiFi图传遥控模组。这个看似简单的设备&#xff0c;却蕴含着巨大的能量&#xff0c;它正在悄…

深度学习-感知机

目录 感知机训练感知机感知机模型感知机学习算法 收敛定理XOR问题总结 多层感知机学习XOR隐藏层单隐藏层---单分类激活函数Sigmoid激活函数Tanh 激活函数ReLU 激活函数 多类分类---单隐藏层多类分类---多隐藏层总结 多层感知机从零开始多层感知机的简洁实现总结 感知机 给定输…

智慧通信|IEEE Trans. Commun. 论文解读:延迟敏感的能量收集无线传感器的最佳调度、结构特性和近似分析

原文信息 Sharma, Nikhilesh, Nicholas Mastronarde, and Jacob Chakareski. “Delay-sensitive energy-harvesting wireless sensors: Optimal scheduling, structural properties, and approximation analysis.” IEEE Transactions on Communications 68.4 (2019): 2509-25…

OZON如何查询销量,OZON查销量哪里可以看

在竞争激烈的电商市场中&#xff0c;了解商品销量是每位卖家优化销售策略、提升竞争力的关键。作为俄罗斯领先的跨境电商平台&#xff0c;Ozon为卖家提供了丰富的数据支持&#xff0c;帮助卖家更好地掌握市场动态。然而&#xff0c;对于新手卖家来说&#xff0c;如何在Ozon上查…

1、爬⾍概述

1. 什么是爬虫&#xff1f; 爬虫&#xff08;Web Crawler&#xff09;是一种通过编写程序自动访问并提取互联网上数据的技术。爬虫可以帮助我们在浏览网页时自动收集和保存一些有用的数据&#xff0c;例如图片、视频和文本信息。简单来说&#xff0c;爬虫就是自动化的浏览器。…

InsightFace 人脸识别算法实现过程解析

最近研究了一下人脸识别算法&#xff0c;初步实现了基础的人脸识别。 源码github下载地址&#xff1a;insightface 第一步 解压源码配置环境 1、使用conda虚拟环境创建insightface环境 conda create -n insightface python3.8创建环境完成后&#xff0c;激活环境 conda ac…

手把手教你如何在宝塔上添加可道云登录页面的ICP备案信息,别跟权威开玩笑。

如何在宝塔上添加可道云登录页面的ICP备案信息 事情的原由来我们开始吧首先登录你的宝塔页面双击打开index.php文件保存退出即可 感谢大佬&#xff0c;希望对被查到的朋友有所帮助&#xff01; 事情的原由 今天突然收到腾讯云发来的一封Email&#xff0c;说我需要整改我的网站…