AcWing 4655. 重新排序(差分,排序,贪心)

给定一个数组 A A A 和一些查询 L i , R i L_i,R_i Li,Ri,求数组中第 L i L_i Li 至第 R i R_i Ri 个元素之和。

小蓝觉得这个问题很无聊,于是他想重新排列一下数组,使得最终每个查询结果的和尽可能地大。

小蓝想知道相比原数组,所有查询结果的总和最多可以增加多少?

输入格式
输入第一行包含一个整数 n n n

第二行包含 n n n 个整数 A 1 , A 2 , ⋅ ⋅ ⋅ , A n A_1,A_2,⋅⋅⋅,A_n A1,A2,,An,相邻两个整数之间用一个空格分隔。

第三行包含一个整数 m m m 表示查询的数目。

接下来 m m m 行,每行包含两个整数 L i 、 R i L_i、R_i LiRi,相邻两个整数之间用一个空格分隔。

输出格式
输出一行包含一个整数表示答案。

数据范围
对于 30 30 30% 的评测用例, n , m ≤ 50 n,m≤50 n,m50
对于 50 50 50% 的评测用例, n , m ≤ 500 n,m≤500 n,m500
对于 70 70 70% 的评测用例, n , m ≤ 5000 n,m≤5000 n,m5000
对于所有评测用例, 1 ≤ n , m ≤ 105 , 1 ≤ A i ≤ 106 , 1 ≤ L i ≤ R i ≤ n 1≤n,m≤105,1≤A_i≤106,1≤L_i≤R_i≤n 1n,m1051Ai1061LiRin

输入样例:

5
1 2 3 4 5
2
1 3
2 5

输出样例:

4

样例解释
原来的和为 6+14=20,重新排列为 (1,4,5,2,3) 后和为 10+14=24,增加了 4。


很容易想到能够用差分的方法来求出所有操作覆盖到每个点的次数,如果使用c[]存储那么原本能够得到的总和就是
c 1 ∗ a 1 + c 2 ∗ a 2 + . . . . . . + c i ∗ a i c_1*a_1 + c_2*a_2 + ...... + c_i*a_i c1a1+c2a2+......+ciai
可以想到如果把所有的数值更大的 a a a放到覆盖次数更多的点上就可以得到最大的结果,这一步不要想怎么去把 a a a放到相应的位置,而是直接可以对两个数组进行同样的递增或递减顺序排序,排序之后,最大的 a a a元素必然对齐了最大的 c c c元素。

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
#define ll long longint n,m;
int b[N];
int a[N];
ll c[N];void insert(int l,int r,int c){b[l] += c;b[r+1] -= c;
}int main(){cin >> n;for(int i = 1;i <= n;i++)cin >> a[i];cin >> m;while(m--){int l,r;cin >> l >> r;insert(l,r,1);}for(int i = 1;i <= n;i++)c[i] = c[i-1] + b[i];//求出操作覆盖每个点的次数ll oriRes = 0;for(int i = 1;i <= n;i++)oriRes += c[i]*a[i];//求出原本的答案sort(c+1,c+1+n);sort(a+1,a+1+n);ll res = 0;for(int i = 1;i <= n;i++)res += c[i]*a[i];cout << res - oriRes;return 0;
}

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

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

相关文章

【Java基础概述-10】IO流、字节流、字符流、缓冲流、转换流、序列化、打印流、Properties属性集对象

目录 1、IO流概述 2、字节流的使用 2.1、FileInputStream字节输入流 2.1.1、读取方式一 2.1.2、读取方式二 2.1.3、字节流读取数据如何避免中文乱码 2.2、OutputStream字节输出流 2.3、案例&#xff1a;复制粘贴小案例 3、字符流 3.1、FileReader字符输入流 3.1.1、读…

常见HTTP状态码分类

常见HTTP状态码分类&#xff1a; 1xx&#xff08;信息性状态码&#xff09;&#xff1a; 100 Continue&#xff1a;客户端可以继续发送请求的剩余部分。101 Switching Protocols&#xff1a;服务器已同意切换到另一种协议。 2xx&#xff08;成功状态码&#xff09;&#xff…

打卡学习kubernetes——kubernetes架构原理

接上一篇的内容&#xff0c;除了核心组件&#xff0c;还有一些推荐的Add-ons&#xff1a; kube-dns 负责为整个集群提供DNS服务Ingress Controller 为服务提供外网入口Heapster 提供资源监控&#xff08;没用过这个&#xff0c;但是用过grafana&#xff0c;很方便&#xf…

MySQL的事务隔离是如何实现的?

目录 从一个例子说起 快照读和当前读 事务的启动时机和读视图生成的时刻 MVCC 隐藏字段 Undo Log回滚日志 Read View - 读视图 可重复读(RC)隔离级别下的MVCC 读提交(RR)隔离级别下的MCC 关于MVCC的一些疑问 1.为什么需要 MVCC &#xff1f;如果没有 MVCC 会怎样&am…

ov多域名SSL数字证书1200元一年送一月

随着互联网的发展&#xff0c;不论是个人用户还是企事业单位都不止有一个网站&#xff0c;为了保护网站安全&#xff0c;就需要为网站安装SSL证书&#xff0c;而SSL证书中的通配符SSL证书和多域名SSL证书都可以同时保护多个域名站点。其中&#xff0c;多域名SSL证书可以同时保护…

POS 之 验证者如何才能提议区块

验证者提议区块 验证者帐户提议区块。 验证者帐户由节点运营商(可以是AWS等待云服务商)管理&#xff0c;节点运营商运行验证者软件作为其执行和共识客户端的一部分&#xff0c;并且已经向存款合约中存入了至少 32 个以太币 然而&#xff0c;每个验证者只是偶尔负责提议一个区块…

jvm题库详解

1、JVM内存模型 注意&#xff1a;这个是基于jdk1.8之前的虚拟机&#xff0c;在jdk1.8后 已经没有方法区&#xff0c;一并合并到堆中的元空间了 JVM内存区域总共分为两种类型 线程私有区域&#xff1a;程序计数器、本地方法栈和虚拟机栈 线程共享区域&#xff1a;堆&#xff08…

android MMKV数据持久化缓存集合

前言 最近在使用mmkv缓存的时候 发现没有集合缓存 非常不方便 自己写一个方法 MMKV public class MmkvUtils {private MmkvUtils() {throw new UnsupportedOperationException("u cant instantiate me...");}public static void init() {MMKV.initialize(LeoUtils…

脚本.py文件转.exe文件遇见的问题,打开exe文件出现弹窗: No module named ‘xxx‘

目录 1 问题2 问题分析3 解决过程3.1 确保Pillow库存在3.2 迷惑阶段3.3 解决问题 4 希望大佬解答 1 问题 今天做了一个使用Python写的脚本文件.py&#xff0c;打算把它转换成.exe文件。点击生成的exe文件时&#xff0c;出现了如下弹窗。 2 问题分析 根据错误描述&#xff1…

国际黄金在哪里买?

国际黄金可以在以下几个主要的市场和渠道进行购买&#xff1a; 1. 黄金交易所&#xff1a;国际上有多个黄金交易所&#xff0c;其中最知名的是伦敦金属交易所&#xff08;London Bullion Market Association&#xff0c;简称LBMA&#xff09;。LBMA是全球最大的黄金交易市场&am…

Arrays --Java学习笔记

Arrays 用来操作数组的一个工具类 Arrays类提供的常见方法&#xff1a; 代码演示&#xff1a; import java.util.Arrays; import java.util.function.IntToDoubleFunction; import java.util.function.IntUnaryOperator;public class Arrays类 {public static void main(Str…

[JAVAEE]—进程和多线程的认识

文章目录 什么是线程什么是进程进程的组成什么是pcb 进程概括线程线程与进程的关系线程的特点 创建线程创建线程方法创建线程的第二种方法对比 其他的方式匿名内部类创建线程匿名内部类创建Runable的子类lambda表达式创建一个线程 多线程的优势 什么是线程 什么是进程 首先想…

设计模式 — — 前端

常见的设计模式 单例模式工厂模式策略模式代理模式观察者模式… 单例模式 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否&#xff0c;如果存在则直接返回&#xff0c;如果不存在就创建了再返回&#xff0c;这就确保了一…

扫雷游戏 --- C语言实现

扫雷游戏 test.c — 与游戏相关的逻辑测试 game.c — 与游戏相关的函数实现 game.h — 与游戏相关的函数的声明 //test.c#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){printf("******************************\n");printf("******…

OpenCASCADE开发指南<七>:OCC 中的数学基本类型和数学算法

1 标准对象的集合容器 在处理现实问题时&#xff0c;经常将问题抽象成一个数学模型&#xff0c;接着对模型求解&#xff0c; 然后将解提取出来以解决现实问题。 其实在 CAD 软件中&#xff0c; 主要解决的就是数学模型。因此&#xff0c;本节将描述 OCC 的数学基本类型和数学算…

Adb无线连接调试

1.在开发者选项打开usb调试&#xff0c;以及无线调试 2.手机连接wifi&#xff0c;进入设置静态ip地址&#xff0c;网关 3.手机通过usb先连接电脑 4.adb devices命令检查设备连接情况 5.adb tcpip 5555 6.adb -s 255d50d7 tcpip 5555&#xff08;255d50d7为第4步获取的设备…

JavaWeb06-MVC和三层架构

目录 一、MVC模式 1.概述 2.好处 二、三层架构 1.概述 三、MVC与三层架构 四、练习 一、MVC模式 1.概述 MVC是一种分层开发的模式&#xff0c;其中 M&#xff1a;Model&#xff0c;业务模型&#xff0c;处理业务 V&#xff1a; View&#xff0c;视图&#xff0c;界面展…

【LeetCode每日一题】2789. 合并后数组中的最大元素

文章目录 [2789. 合并后数组中的最大元素](https://leetcode.cn/problems/largest-element-in-an-array-after-merge-operations/)思虑&#xff1a;代码&#xff1a; 2789. 合并后数组中的最大元素 思虑&#xff1a; 1.因为要合并的条件之一是&#xff0c;num[i]<num[i1].所…

5.Python从入门到精通—Python 运算符

5.Python从入门到精通—Python 运算符 Python 运算符算术运算符比较&#xff08;关系&#xff09;运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级 Python 运算符 Python语言支持以下类型的运算符: 算术运算符比较&#xff08;关系&#xff09;运算符赋…