当前位置: 首页 > news >正文

蓝桥杯备赛-差分-重新排序

问题描述

给定一个数组 AA 和一些查询 Li,RiLi​,Ri​, 求数组中第 LiLi​ 至第 RiRi​ 个元素之和。

小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查 询结果的和尽可能地大。小蓝想知道相比原数组, 所有查询结果的总和最多可 以增加多少?

输入格式

输入第一行包含一个整数 nn 。

第二行包含 nn 个整数 A1,A2,⋯,AnA1​,A2​,⋯,An​, 相邻两个整数之间用一个空格分隔。

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

接下来 mm 行, 每行包含两个整数 Li、RiLi​、Ri​, 相邻两个整数之间用一个空格分 隔。

输出格式

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

样例输入

5
1 2 3 4 5
2
1 3
2 5

样例输出

4

样例说明

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

评测用例规模与约定

对于 30%30% 的评测用例, n,m≤50n,m≤50;

对于 50%50% 的评测用例, n,m≤500n,m≤500;

对于 70%70% 的评测用例, n,m≤5000n,m≤5000;

对于所有评测用例, 1≤n,m≤105,1≤Ai≤106,1≤Li≤Ri≤1061≤n,m≤105,1≤Ai​≤106,1≤Li​≤Ri​≤106 。

#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//计算每个位置的查询次数,查询次数最多的放最大的数字
//注意查询和要用long long
//差分--对于一段区间的操作--先在差分数组上做标记--再利用a[i]=a[i-1]+d[i]---重置a数组
//cha是d的前缀和数组,d是cha的差分数组
int main() {
	int n;
	cin >> n;
	vector<int> a(n + 5, 0);
	vector<int> cha(n + 5, 0);
	vector<int> d(n + 5, 0);
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}//初始化a数组
	int m;
	cin >> m;
	int l, r;
	for (int i = 1; i <= m; i++) {
		cin >> l >> r;
		d[l]++;
		d[r + 1]--;
	}//初始化差分数组
	for (int i = 1; i <= n; i++) {
		cha[i] = cha[i - 1] + d[i];
	}//更新cha数组
	long long sum1 = 0;
	long long sum2 = 0;
	for (int i = 1; i <= n; i++){
		sum1 += (long long)a[i] * cha[i];
//将 sum1 += a[i] * cha[i]; 改为 sum1 += (long long)a[i] * cha[i]; 原因在于数据类型的溢出问题。当 a[i] 和 cha[i] 的值较大时,a[i] * cha[i] 的结果可能会超出 int 类型的表示范围(int 通常是 32 位,范围是 -2^31 到 2^31 - 1)。
	}
	sort(a.begin() + 1, a.begin() + 1 + n);//从大到小
	sort(cha.begin() + 1, cha.begin() + 1 + n);
	for (int i = 1; i <= n; i++) {
		sum2 += (long long)a[i] * cha[i];
	}
	cout << sum2 - sum1;
	return 0;
}

 前缀和与差分 图文并茂 超详细整理(全网最通俗易懂)-CSDN博客

相关文章:

  • hive面试题--left join的坑
  • k8s集群中部署dcgm-exporter收集GPU指标
  • 机器学习 Day01人工智能概述
  • 串口数据记录仪DIY,体积小,全开源
  • 华为Mate 60 Pro+ 等机型适配支持运营商北斗卫星短信功能
  • 代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II
  • 前端(AJAX)学习笔记(CLASS 4):进阶
  • 图库 | 基于图增强的智慧审计系统革新
  • Pika 技术浅析(三):生成对抗网络
  • C++编程:进阶阶段—4.2对象
  • 【十四】Golang 接口
  • 一学就会的深度学习基础指令及操作步骤(5)使用预训练模型
  • Vue3实战学习(Element-Plus常用组件的使用(输入框、下拉框、单选框多选框、el-image图片))(上)(5)
  • linux centos 安装源码nginx,开放端口
  • 【数据挖掘】知识蒸馏(Knowledge Distillation, KD)
  • 解决 Java/Kotlin 资源加载问题
  • 开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器
  • Compose 实践与探索一 —— 关键知识与概念详解
  • autoreconf --install的作用
  • OpenPose初体验
  • 严打金融黑灰产,今年来上海警方破获各类经济犯罪案件690余起
  • 缅甸内观冥想的历史漂流:从“人民鸦片”到东方灵修
  • 在古老的意大利科莫歌剧院,廖昌永唱响16首中国艺术歌曲
  • 持续8年仍难终了的纠纷:败诉方因拒执罪被立案,胜诉方银行账户遭冻结
  • 一手实测深夜发布的世界首个设计Agent - Lovart。
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展