【16届蓝桥杯寒假刷题营】第1期DAY5

news2025/1/23 13:36:51

5.依依的询问最小值 - 蓝桥云课

问题描述

依依有个长度为 n 的序列 a,下标从 1 开始。

她有 m 次查询操作,每次她会查询下标区间在 [li​,ri​] 的 a 中元素和。她想知道你可以重新排序序列 a,使得这 m 次查询的总和最小。

求你求出 m 次查询总和的最小值。

输入格式

第一行输入两个整数 n,m (1≤n,m≤105),表示序列 a 的长度以及查询次数。

第二行输入 n 个整数 ai​ (1≤ai​≤105),表示序列 a 中的元素。

接下来 m 行,每行输入两个整数 li​,ri​ (1≤li​≤ri​≤n),表示询问的下标区间。

输出格式

输出仅一行,包含一个整数,表示 m 次查询总和的最小值。

样例输入

3 2
1 2 3
1 2
2 3

样例输出

7

思路:

方法一:

下标次数越多说明对应的数值就要最小,这样m 次查询总和就最小。所以我们要记录每一个下标出现的次数降序排序,输入数组的值升序排序。用sum记录它们一一对应相乘和相加即可。但是当m,n很大的时候时间复杂度很高,数值也很大,会失进度和超时。

代码如下:
 

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 1e5+10;
int n,m;
int arr[N];
int has[N];
bool compare(int a,int b)
{
	return a > b;
}
int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for(int i = 1 ; i <= n ; i++)
	{
		cin >> arr[i];
	}
	int l,r;
	while(m--)
	{
		cin >> l >> r;
		for(int j = l ; j <= r ; j++)
		{
			has[j]++;
		}
	}
	sort(has + 1, has + 1 + n,compare);//对has数组降序 
	sort(arr + 1,arr + 1 + n);//对arr数组升序排序
	int sum = 0;
	for(int i = 1 ; i <= n ; i++)
	{
		sum += arr[i] * has[i];	
	} 
	cout << sum;
	
} 

方法二:
面对这种区间问题,我们需要用到差分数组优化。差分数组可以很好的将一个区间同时增加,减少。对于这道题只有增加出现次数的下标。所以差分数组一开始都为0。待到全部区间操作完毕,用   dif[i] += dif[i - 1];  // 累加差分数组得到实际频率。得到实际数组。

代码如下:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const ll N = 1e5+10;
ll n,m;
ll arr[N];
ll dif[N];
bool compare(ll a,ll b)
{
	return a > b;
}
int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for(ll i = 1 ; i <= n ; i++)
	{
		cin >> arr[i];
	}
	
	ll l,r;
	while(m--)
	{
		cin >> l >> r;
		dif[l] += 1;
		if(r+1 <= n)//注意边界
		dif[r+1] -= 1;	
	}
	//通过差分数组实现原本数组
 	for (ll i = 1; i <= n; i++)
    {
        dif[i] += dif[i - 1];  // 累加差分数组得到实际频率
    }
	sort(dif + 1, dif + 1 + n,compare);//对dif数组降序 
	sort(arr + 1,arr + 1 + n);//对arr数组升序排序
	ll sum = 0;
	for(ll i = 1 ; i <= n ; i++)
	{
		sum += arr[i] * dif[i];	
	} 
	cout << sum;
	
} 

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

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

相关文章

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini&#xff1a;初始化GPIO引脚的模式&#xff0c;速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits&#xff1a;将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…

C语言--数据在内存中的存储

数据在内存中的存储 主要研究整型和浮点型在内存中的存储。 1. 整数在内存中的存储 在学习操作符的时候&#xff0c;就了解过了下面的内容&#xff1a; 整数的2进制表示方法有三种&#xff0c;即原码、反码和补码。 有符号的整数&#xff0c;三种表示方法均有符号位和数值…

DRG_DIP 2.0时代医院程序结构转型与数据结构优化研究

一、引言 1.1 DRG_DIP 2.0 改革背景与意义 医保支付方式改革在医疗保障制度改革中占据着极为关键的地位&#xff0c;是推动医疗领域变革的核心力量。它犹如一把精准的手术刀&#xff0c;对医疗资源的合理分配、医疗服务质量的稳步提升以及医疗费用的有效控制起着决定性作用。…

炸场硅谷,大模型“蒸汽机”迎来“瓦特时刻”

作者 | 曾响铃 文 | 响铃说 中国大模型又在包括硅谷在内的全球AI圈炸场了。 两天前&#xff0c;幻方量化旗下AI公司深度求索&#xff08;DeepSeek&#xff09;&#xff0c;以及月之暗面相隔20分钟相继发布了自家最新版推理模型&#xff0c;分别是DeepSeek-R1以及Kimi 全新多…

【自动驾驶】4 智驾生态概述

目录 1 智驾生态概述 ▲ 关键组成部分 ▲ 概述 2 关键技术 ▲ 传感器 ▲ 感知 ▲ 数据闭环 3 未来市场 1 智驾生态概述 智能驾驶生态&#xff0c;简称智驾生态&#xff0c;是指围绕智能驾驶技术的开发、应用、服务和支持所形成的产业体系和合作网络。 涵盖了从硬件设…

Excel 技巧14 - 如何批量删除表格中的空行(★)

本文讲如何批量删除表格中的空行。 1&#xff0c;如何批量删除表格中的空行 要点就是按下F5&#xff0c;然后选择空值条件以定位所有空行&#xff0c;然后删除即可。 按下F5 点 定位条件 选 空值&#xff0c;点确认 这样就选中了空行 然后点右键&#xff0c;选 删除 选中 下方…

C语言进阶习题【1】指针和数组(4)——指针笔试题3

笔试题5&#xff1a;下面代码输出是是什么&#xff1f; int main() {int a[5][5];int(*p)[4];p a;printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0; }分析 代码结果 笔试题6&#xff1a;下面代码输出是是什么&#xff1…

5. 推荐算法的最基础和最直观的认识

1.性别年龄转换为统一的计量单位 所谓推荐&#xff0c;就是替别人推荐&#xff0c;比如工厂A需要招男员工&#xff0c;希望大家推荐认识的人。那么在这里&#xff0c;就有了推荐的概念&#xff0c;限定条件是男。我们知道&#xff0c;人的性别一般分为男或者女。在这里假设把男…

如何在Matplotlib中绘制多个Y轴刻度

Matplotlib是一个功能强大的Python库&#xff0c;在它的帮助下&#xff0c;我们可以绘制条形图&#xff0c;图表&#xff0c;绘图&#xff0c;比例等。在本文中&#xff0c;我们将尝试在Matplotlib中绘制多个Y轴刻度。 为什么多个Y轴刻度很重要&#xff1f; 绘制具有不同单位…

大模型GUI系列论文阅读 DAY1:《基于大型语言模型的图形用户界面智能体:综述》(6.6W 字长文)

摘要 图形用户界面&#xff08;Graphical User Interfaces, GUIs&#xff09;长期以来一直是人机交互的核心&#xff0c;为用户提供了直观且以视觉为驱动的方式来访问和操作数字系统。传统上&#xff0c;GUI交互的自动化依赖于基于脚本或规则的方法&#xff0c;这些方法在固定…

RabbitMQ1-消息队列

目录 MQ的相关概念 什么是MQ 为什么要用MQ MQ的分类 MQ的选择 RabbitMQ RabbitMQ的概念 四大核心概念 RabbitMQ的核心部分 各个名词介绍 MQ的相关概念 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&am…

linux 下tensorrt的yolov8的前向推理(python 版本)的实现

一、yolov8的python实现的环境搭建 #通过pip安装 pip install ultralytics #通过git克隆GitHub仓库 git clone <https://github.com/ultralytics/ultralytics.git> cd ultralytics #安装依赖 pip install -r requirements.txt #执行推理 yolo predict model./yolov8n.pt …

java文件按行写入数据后并创建行索引及查询

背景 当有很多数据需要存储&#xff0c;这些数据只是想要简单的按行存储和查询&#xff0c;不需要进行其他条件搜索&#xff0c;此时就可以考虑不需把这些数据存储在数据库&#xff0c;而是直接写入文件&#xff0c;然后从文件中查询 但是正常情况下&#xff0c;如果仅仅只是按…

SpringBoot集成Flink-CDC,实现对数据库数据的监听

一、什么是 CDC &#xff1f; CDC 是Change Data Capture&#xff08;变更数据获取&#xff09;的简称。 核心思想是&#xff0c;监测并捕获数据库的变动&#xff08;包括数据或数据表的插入、 更新以及删除等&#xff09;&#xff0c;将这些变更按发生的顺序完整记录下来&…

VisualStudio中配置OpenGL环境并制作模板

VisualStudio中配置OpenGL环境并制作模板 本教程来自&#xff1a;sumantaguha Install Visual Studio Download Microsoft Visual Studio Community 2019 from https://my. visualstudio.com/Downloads?qvisual%20studio%202019&wt.mc_ idomsftvscom~older-downloads and…

工程上LabVIEW常用的控制算法有哪些

在工程应用中&#xff0c;LabVIEW常用的控制算法有很多&#xff0c;它们广泛应用于自动化、过程控制、机器人、测试测量等领域。以下是一些常见的控制算法&#xff1a; 1. PID 控制 用途&#xff1a;PID&#xff08;比例-积分-微分&#xff09;控制是最常用的反馈控制算法&…

WPF1-从最简单的xaml开始

1. 最简单的WPF应用 1.1. App.config1.2. App.xaml 和 App.xaml.cs1.3. MainWindow.xaml 和 MainWindow.xaml.cs 2. 正式开始分析 2.1. 声明即定义2.2. 命名空间 2.2.1. xaml的Property和Attribute2.2.2. xaml中命名空间2.2.3. partial关键字 学习WPF&#xff0c;肯定要先学…

对话小羊驼vicuna

文章目录 1. gpu租用2. 公网网盘存储实例/数据3. 登录实例4. 预训练模型下载5. llama、alpaca、vicuna的前世今生6. 对话Vicuna&#xff08;1&#xff09;llama-2-7b-hf&#xff08;2&#xff09;vicuna-7b-delta-v0&#xff08;3&#xff09;vicuna-7b-v0&#xff08;4&#x…

web路径问题和会话技术(Cookie和Session)

一.Base 1.base介绍①base是HTMl语言的基准网址标签,是一个单标签,位于网页头部文件的head标签内②一个页面最多使用一个base元素,用来提供一个指定的默认目标,是一种表达路径和连接网址的标记③常见的url路径分别有相对路径和绝对路径,如果base标签指定了目标,浏览器将通过这个…

C++17 新特性解析:Lambda 捕获 this

C17 引入了许多改进和新特性&#xff0c;其中之一是对 lambda 表达式的增强。在这篇文章中&#xff0c;我们将深入探讨 lambda 表达式中的一个特别有用的新特性&#xff1a;通过 *this 捕获当前对象的副本。这个特性不仅提高了代码的安全性&#xff0c;还极大地简化了某些场景下…