练习-依依的询问最小值(前缀和差分)

news2025/3/17 21:44:06

问题描述

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

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

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

输入格式

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

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

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

输出格式

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

样例输入

3 2
1 2 3
1 2
2 3

样例输出

7

样例解释

1. 输入
  • 序列 a=[1,2,3]a=[1,2,3]。

  • 查询区间:

    • [1,2]:a[1]+a[2]

    • [2,3]:a[2]+a[3]

2. 计算每个索引被查询的次数
  • 索引 1:被查询区间 [1,2]覆盖,次数为 1。

  • 索引 2:被查询区间 [1,2]和 [2,3] 覆盖,次数为 2。

  • 索引 3:被查询区间 [2,3]覆盖,次数为 1。

3. 重新排列序列 a
  • 将较大的元素分配给被较少查询区间覆盖的索引,将较小的元素分配给被较多查询区间覆盖的索引。

  • 索引 2 被查询的次数最多,因此应该分配最小的元素。

  • 索引 1 和 3 被查询的次数较少,可以分配较大的元素。

重新排列后的序列:

  • 索引 1:3

  • 索引 2:1

  • 索引 3:2

即 a=[3,1,2]。

4. 计算查询区间的元素和
  • [1,2]:a[1]+a[2]=3+1=4

  • [2,3]:a[2]+a[3]=1+2=3

5. 总和
  • 总和为 4+3=74+3=7。


1. 问题分析

  • 目标:通过重新排列序列 a,使得所有查询区间的元素和的总和最小。

  • 查询区间:每个查询区间 [li,ri] 的元素和是 a[li]+a[li+1]+⋯+a[ri]。

  • 操作:只能重新排列序列 a,不能修改或删除元素。


2. 关键观察

1. 查询区间的重叠
  • 不同的查询区间可能会重叠,导致某些索引被多次查询。

  • 例如,查询区间 [1,3]和 [2,4] 重叠在索引 2 和 3。

2. 元素分配的策略
  • 如果一个索引被多个查询区间覆盖,那么该索引的值会对多个查询区间的元素和产生影响。

  • 为了最小化总和,我们应该将较大的元素分配给被较少查询区间覆盖的索引,将较小的元素分配给被较多查询区间覆盖的索引。

3. 差分数组的使用
  • 差分数组可以高效地统计每个索引被查询的次数。

  • 通过差分数组,我们可以在 O(n+m) 的时间复杂度内计算出每个索引被查询的次数。

4. 排序和分配
  • 将查询次数从小到大排序,将序列 a 从大到小排序。

  • 将较大的元素分配给被较少查询区间覆盖的索引,将较小的元素分配给被较多查询区间覆盖的索引。


3. 解决思路

基于以上观察,我们可以设计以下解决思路:

  1. 统计每个索引被查询的次数

    • 使用差分数组统计每个索引被查询的次数。

    • 通过前缀和数组计算每个索引被查询的次数。

  2. 排序

    • 将查询次数从小到大排序。

    • 将序列 a 从大到小排序。

  3. 分配元素

    • 将较大的元素分配给被较少查询区间覆盖的索引,将较小的元素分配给被较多查询区间覆盖的索引。

  4. 计算最小总和

    • 计算所有查询区间的元素和的总和。


解题代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
int g[N]; // 差分数组,用于统计每个索引被查询的次数
int prefix[N]; // 前缀和数组,用于计算每个索引被查询的次数
int a[N]; // 存储输入的序列 a

// 自定义排序函数,用于将数组从大到小排序
bool cmp(int u, int v)
{
    return u > v;
}

int main()
{
    int n, m; // n 是序列长度,m 是查询次数
    long long cnt = 0; // 用于存储最小总和
    cin >> n >> m; // 输入序列长度 n 和查询次数 m

    // 输入序列 a,索引从 1 开始
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }

    // 使用差分数组统计每个索引被查询的次数
    while (m)
    {
        int l, r; // 查询区间的左右端点
        cin >> l >> r;
        g[l]++; // 从 l 开始,查询次数增加 1
        g[r + 1]--; // 从 r + 1 开始,查询次数减少 1
        m--; // 处理完一个查询,m 减 1
    }

    // 计算每个索引被查询的次数
    prefix[1] = g[1]; // 初始化 prefix[1]
    for (int i = 2; i <= n; i++)
    {
        prefix[i] = prefix[i - 1] + g[i]; // 计算 prefix[i]
    }

    // 将 prefix 数组从小到大排序
    sort(prefix + 1, prefix + 1 + n);

    // 将 a 数组从大到小排序
    sort(a + 1, a + 1 + n, cmp);

    // 计算最小总和
    for (int i = 1; i <= n; i++)
    {
        cnt += a[i] * prefix[i]; // 将较大的元素分配给被较少查询区间覆盖的索引
    }

    cout << cnt;

    return 0;
}

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

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

相关文章

ctfshow web刷题记录

RCE 第一题 eval代码执行 &#xff1a; 1、使用system 加通配符过滤 ?csystem("tac%20fl*") ; 2、反字节执行 xxx %20 echo 反字节 3、变量转移 重新定义一个变量 让他代替我们执行 4、伪协议玩法 ?cinclude$_GET[1]?>&1php://filter/readc…

MySQL单表查询大全【SELECT】

山再高&#xff0c;往上攀&#xff0c;总能登顶&#xff1b;路再长&#xff0c;走下去&#xff0c;定能到达。 Mysql中Select 的用法 ------前言------【SELECT】0.【准备工作】0.1 创建一个库0.2 库中创建表0.3 表中加入一些数据 1.【查询全部】2.【查询指定列】2.1查询指定列…

考研系列-408真题计算机网络篇(18-23)

写在前面 此文章是本人在备考过程中408真题计算机网络部分&#xff08;2018年-2023年&#xff09;的易错题及相应的知识点整理&#xff0c;后期复习也常常用到&#xff0c;对于知识提炼归纳理解起到了很大的作用&#xff0c;分享出来希望帮助到大家~ # 2018 1.停止-等待协议的…

卷积神经网络(CNN)之 EfficientNet

在深度学习领域&#xff0c;模型的计算效率与性能之间的平衡一直是一个核心挑战。随着卷积神经网络&#xff08;CNN&#xff09;在图像分类、目标检测等任务中取得显著成果&#xff0c;模型的复杂度和计算需求也急剧增加。2019年&#xff0c;Google Research 提出的 EfficientN…

【eNSP实战】将路由器配置为DHCP服务器

拓图 要求&#xff1a; 为 office100 和 office200 分别配置地址池 AR1接口配置 interface GigabitEthernet0/0/0ip address 192.168.100.1 255.255.255.0 # interface GigabitEthernet0/0/1ip address 192.168.200.1 255.255.255.0 AR1路由器上创建office100地址池 [AR1…

Postman下载安装及简单入门

一&#xff0e;Postman简介 Postman是一款API测试工具&#xff0c;可以帮助开发、测试人员发送HTTP请求&#xff0c;与各种API进行交互&#xff0c;并分析响应 二&#xff0e;下载与安装 访问Postman官网&#xff08;https://www.postman.com/&#xff09;&#xff0c;下载适…

vulnhub靶场之loly靶机

前言 挑战攻克该靶机30分钟 靶机&#xff1a;loly靶机&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 靶机和攻击机都采用VMware虚拟机&#xff0c;都采用桥接网卡模式 文章涉及的靶机及工具&#xff0c;都可以自行访问官网或者项…

LLM论文笔记 25: Chain-of-Thought Reasoning without Prompting

Arxiv日期&#xff1a;2024.5.31机构&#xff1a;Google DeepMind 关键词 cot-decoding推理路径pretrain 核心结论 1. LLMs 不需要prompting就可以生成链式推理路径&#xff0c;prompting只是将这些能力显性化的一种手段 2. cot path 往往与更高的model confidence相关&…

新型XCSSET恶意软件利用增强混淆技术攻击macOS用户

微软威胁情报团队发现了一种新型的XCSSET变种&#xff0c;这是一种复杂的模块化macOS恶意软件&#xff0c;能够感染Xcode项目&#xff0c;并在开发者构建这些项目时执行。 这是自2022年以来的首个已知XCSSET变种&#xff0c;采用了增强的混淆方法、更新的持久化机制以及新的感…

C++初阶——类和对象(三) 构造函数、析构函数

C初阶——类和对象&#xff08;三&#xff09; 上期内容&#xff0c;我们围绕类对象模型的大小计算&#xff0c;成员存储方式&#xff0c;this指针&#xff0c;以及C实现栈和C语言的比较&#xff0c;进一步认识了C的封装特性。本期内容&#xff0c;我们开始介绍类的默认成员函…

【Function】使用托管身份调用Function App触发器,以增强安全性

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 1. 背景介绍2. 设置3. 使用Web应用调用Function App触发器(Node.js示例)4. 执行结果此方法允许您使用托管身份(Managed Identity)调…

x012-MSP430F249智能步进电动百叶窗_proteus_光敏电阻_步进电机_仿真

https://www.dong-blog.fun/post/1997 46 、智能步进电动百叶窗 基本要求&#xff1a; 用一台步进电机控制百叶窗叶片的旋转&#xff08;正转/反转&#xff09; 用 LED 数码管显示旋转角度 设置按键&#xff1a; 手动/自动切换、手动正转和手动反转&#xff0c;停止/启动键 用一…

牛客周赛85 题解 Java ABCDEFG

A小紫的均势博弈 判断输入的 n 是奇数还是偶数 import java.io.*; import java.math.*; import java.util.*;public class Main {static IoScanner sc new IoScanner();static final int mod(int) (1e97);static void solve() throws IOException {int nsc.nextInt();if(n%2…

# RAG 框架 # 一文入门 全链路RAG系统构建与优化 —— 架构、策略与实践

本文全面阐述了RAG系统从数据收集、数据清洗&#xff08;包括领域专有名词处理&#xff09;、智能数据分块与QA对生成&#xff0c;到向量化、向量数据库选择与配置&#xff0c;再到检索方式及重排序&#xff0c;直至整合输出、监控反馈和安全保障的全流程。通过这一完整方案&am…

【Golang】第二弹-----变量、基本数据类型、标识符

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;Golang &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一、变量 1.1基本介绍…

linux系统CentOS 7版本搭建NFS共享存储

一、什么是NFS共享存储方式 NFS共享存储方式 是一种分布式文件系统协议&#xff0c;允许客户端通过网络访问远程服务器上的文件&#xff0c;就像访问本地文件一样。 二、 NFS的基本概念 &#xff08;1&#xff09;服务器端&#xff1a;提供共享存储的机器&#xff0c;负责导…

Matlab 基于SVPWM的VF三电平逆变器异步电机速度控制

1、内容简介 略 Matlab 167-基于SVPWM的VF三电平逆变器异步电机速度控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

(一)微服务初见之 Spring Cloud 介绍

微服务架构简介 从单体应用架构发展到SOA架构&#xff0c;再到微服务架构&#xff0c;应用架构经历了多年的不断演进。微服务架构不是凭空产生的&#xff0c;而是技术发展的必然结果&#xff0c;分布式云平台的应用环境使得微服务代替单体应用成为互联网大型系统的架构选择。目…

架构思维:软件建模与架构设计的关键要点

文章目录 1. 软件建模的核心概念2. 七种常用UML图及其应用场景类图时序图组件图部署图用例图状态图活动图 3. 软件设计文档的三阶段结构4. 架构设计的关键实践1. 用例图&#xff1a;核心功能模块2. 部署图&#xff1a;架构演进阶段3. 技术挑战与解决方案4. 关键架构图示例5. 架…

【RNN神经网络】序列模型与RNN神经网络

前言 清库存。正式切入大模型后&#xff0c;打算把基础知识都梳理一遍&#xff0c;然后写了两篇就发现写不动了&#xff0c;后面就捡重要的记录。RNN知识仅此一篇记录&#xff0c;扫盲记录。 【自然语言处理】 &#xff08;Natural Language Processing&#xff0c;NLP&#xf…