.离散化.

 

离散化就是将原本大而稀疏的区间,映射到紧凑连续的区间内。进而压缩区间长度。

题目:

假定有一个无限长的数轴,数轴上每个坐标上的数都是 00。

现在,我们首先进行 n𝑛 次操作,每次操作将某一位置 x𝑥 上的数加 c𝑐。

接下来,进行 m𝑚 次询问,每个询问包含两个整数 l𝑙 和 r𝑟,你需要求出在区间 [l,r][𝑙,𝑟] 之间的所有数的和。

输入格式

第一行包含两个整数 n𝑛 和 m𝑚。

接下来 n𝑛 行,每行包含两个整数 x𝑥 和 c𝑐。

再接下来 m𝑚 行,每行包含两个整数 l𝑙 和 r𝑟。

输出格式

共 m𝑚 行,每行输出一个询问中所求的区间内数字和。

数据范围

−109≤x≤109−109≤𝑥≤109,
1≤n,m≤1051≤𝑛,𝑚≤105,
−109≤l≤r≤109−109≤𝑙≤𝑟≤109,
−10000≤c≤10000−10000≤𝑐≤10000

输入样例:
3 3
1 2
3 6
7 5
1 3
4 6
7 8
输出样例:
8
0
5

 题解:


本题的坐标长度为无限长(-1e9~1e9),所以直接运用前缀和是不可能求解的,。
而且如果直接开数组来记录数值也是不可能的,数组的下标为非负数,而本题的区间长度包含负数。
所以用离散化来求解
离散化就是将原本大而稀疏的区间,映射到紧凑连续的区间内。进而压缩区间长度。
这样就可以运用基础算法来进行求解。

另外推荐这位大佬的图解:AcWing 802. 画个图辅助理解~ - AcWing
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;/*
typedef pair是C++中的一个关键字,用于给一个已有的数据类型起一个新的别名。pair是一个模板类,用于存储两个不同类型的值。
例如,我们可以使用typedef pair<int, string> Student来定义一个新的类型Student,
其中int表示学生的学号,string表示学生的姓名。这样,我们就可以使用Student来声明一个变量,
同时可以通过变量名.first和变量名.second来访问学号和姓名。
*/
typedef pair<int, int> PII;//插入时会用到一个坐标,询问时会用到两个坐标,所以所开的数组a
//的长度应满足离散后最大的长度
const int N = 300010;int n, m;
//a是用来储存离散化后的数据(即将原本大而稀疏的数据映射到连续的数组a中),s表示前缀和(相对于数组a)
int a[N], s[N];//容器alls,存储大而稀疏的数据。
vector<int> alls;
//容器add,执行加法运算;容器query,提供所要查找的区间。
//这两者在进行运算之前,已经将对应的数据存到本容器内了
vector<PII> add, query;//二分。查找所要寻找的值。返回在数组a下的坐标
int find(int x)
{//r= x到容器alls的映射的长度-1int l = 0, r = alls.size() - 1;while (l < r){int mid = l + r >> 1;if (alls[mid] >= x) r = mid;else l = mid + 1;}//返回r(l)+1的原因是:前缀和的边界从1开始,而此二分操作的边界是从0开始的return r + 1;
}int main()
{cin >> n >> m;for (int i = 0; i < n; i ++ ){int x, c;cin >> x >> c;
//存放至到add容器里面add.push_back({x, c});
//将所要被操作的坐标存放至alls里面alls.push_back(x);}for (int i = 0; i < m; i ++ ){int l, r;cin >> l >> r;query.push_back({l, r});alls.push_back(l);alls.push_back(r);}// 去重sort(alls.begin(), alls.end());
//unique函数是将某一区间的数据去重,并且返回 去重了之后的数组的最后的坐标,然后删除重复的元素alls.erase(unique(alls.begin(), alls.end()), alls.end());// 处理插入for (auto item : add){int x = find(item.first);
//alls存储的是数轴上的坐标,映射到数组a上,对应的顺序是连续的
//注意容器add的格式是:typedef pair<int, int> PII。add容器可类似于数组,所以x与c是对应的
//让数组a存储alls坐标的值a[x] += item.second;}// 预处理前缀和for (int i = 1; i <= alls.size(); i ++ ) s[i] = s[i - 1] + a[i];// 处理询问for (auto item : query){
//find返回在数组a下的坐标int l = find(item.first), r = find(item.second);cout << s[r] - s[l - 1] << endl;}return 0;
}

 tips:

区间和与区间合并这两节,思路其实并不难,难的是对c++语言的运用。对于c++基础薄弱的同学学起来可能比较吃力。里面牵涉到不少的c++库函数的运用。不过一回生二回熟,不要灰心。要记住掌握住算法才是核心

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

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

相关文章

单调栈|496.下一个更大元素I

力扣题目链接 class Solution { public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> st;vector<int> result(nums1.size(), -1);if (nums1.size() 0) return result;unordered_map<int, …

连接和使用vCenter Server嵌入式vPostgres数据库

vCenter Server 早期支持内嵌(embedded)和外部(external)数据库,内嵌数据库就是vPostgres,基于VMware Postgres数据库(PostgreSQL数据库),外部数据库用的多的是Oracle数据库和SQL Server数据库。因为早期使用内嵌的PostgreSQL数据库只能用于小型环境,比如仅支持几十台…

SpringBoot对接前端传递的base64编码的图片信息,转成图片以Get请求进行浏览器文件下载,不下载到本地。

一、问题描述 1.1需求描述。 前端将浏览器展示的图片以base64编码的形式传递给后端&#xff0c;以此实现文件下载的功能&#xff0c;在浏览器弹出文件下载框。效果如下 1.2实现思路 将前端传递的base64进行解码&#xff0c;设置响应头返回响应体&#xff0c;代码如下。 pu…

ubuntu22.04 cmake 配置mysql

报错信息&#xff1a; CMake Error at CMakeLists.txt:33 (find_package): By not providing “FindMySQL.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “MySQL”, but CMake did not find one. Could not…

【02358单片机原理及应用】第三、四、五章考试复习自考复习

第3章 80C51单片机指令系统 考试知识点&#xff1a; 1、寻址方式 &#xff08;1&#xff09;立即寻址&#xff08;#data&#xff0c;#data16&#xff09;例&#xff1a;MOV A&#xff0c;#00H &#xff08;2&#xff09;直接寻址&#xff08;direct&#xff09;内部RAM…

古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

电商核心技术揭秘四十七:社会化营销中的社区建设

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

【业务场景】京东实际场景,频繁GC引起的CPU飙高问题的解决

目录 1.业务介绍 2.判断任务类型 3.CPU飙高的原因 1.业务介绍 本文的业务场景是京东零售线公开的一篇文章&#xff0c;文章内容详细介绍了京东零售线如何将广告相关的定时任务从半小时优化到秒级的&#xff0c;原文链接&#xff1a; 半小时到秒级&#xff0c;京东零售定时…

登封授牌,花落郑州

近日&#xff0c;“大禹故里故都”授牌仪式在河南省登封市隆重举行&#xff0c;河南省社科院有关单位将匾牌授予登封市。报道称&#xff1a;至此&#xff0c;千百年来备受争议的大禹故里、故都问题&#xff0c;终于尘埃落定&#xff0c;华夏立国始祖大禹终于魂归故里。 略有微词…

QT+串口调试助手+基本版

一、创建串口调试助手UI界面 1、首先生成串口连接必要参数界面&#xff0c;删除关闭串口控件 2、给参数下拉框添加常见的选项&#xff0c;删除关闭串口控件 3、将串口调试助手参数界面布局整齐&#xff0c;删除关闭串口控件 4、更改控件名字&#xff0c;方便后续编程&#xff…

OpenHarmony实战开发-动画曲线、如何实现动画衔接

UI界面除了运行动画之外&#xff0c;还承载着与用户进行实时交互的功能。当用户行为根据意图变化发生改变时&#xff0c;UI界面应做到即时响应。例如用户在应用启动过程中&#xff0c;上滑退出&#xff0c;那么启动动画应该立即过渡到退出动画&#xff0c;而不应该等启动动画完…

特斯拉FSD落地分析

再续前缘 媒体的神经从马斯克的湾流私人飞机起飞那一刻开始,就开始被牵动着。28/4 号的突然访华,在大多数人看来其实已经早已是计划之中,从摆在台面上的消息来看,主要目的是为了在大陆推广FSD的落地,也为8月份FSD 的正式版本做预热,和中国上海的第一次联姻造就了特斯拉m…

孪生网络、匹配网络和原型网络:详解与区分

孪生网络、匹配网络和原型网络 孪生网络、匹配网络和原型网络&#xff1a;详解与区分孪生网络&#xff08;Siamese Networks&#xff09;核心概念工作原理 匹配网络&#xff08;Matching Networks&#xff09;核心概念工作原理 原型网络&#xff08;Prototypical Networks&…

基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载训练好的目标检测器 img_size [448,448]; imgPath test/; % 图像…

2023第十四届蓝桥杯国赛C/C++ 大学 A 组 圆上的连线

思路&#xff1a;很显然总的方案数等于挑选偶数点的方案数乘以对应偶数点的连线方案数之和&#xff0c;挑选偶数点的方案数靠组合数得出&#xff0c;偶数点的连线方案数就是个卡特兰数。具体为什么是卡特兰数&#xff0c;可以任选一个点&#xff0c;枚举这个点所连边的位置&…

第五篇:通信脉络:探索计算机外设与总线体系的精髓

通信脉络&#xff1a;探索计算机外设与总线体系的精髓 1 引言 在这个技术日新月异的时代&#xff0c;理解计算机系统的基本构成要素 —— 总线和外设 —— 对于每个从事技术工作的人来说都是至关重要的。这些组件不仅是计算机通信的基石&#xff0c;也直接影响着系统的性能、效…

Enum,你学会了吗?

大家后&#xff0c;我是小七。 今天给大家分享下java.lang包下面Enum类的面试点&#xff0c;本文阅读需3分钟。 Java轮子 分享程序员日常、职场、互联网项目、开发经验&#xff0c;专注技术提升 12篇原创内容 公众号 在 Java 编程中&#xff0c;枚举类型&#xff08;Enum&…

水仙花数问题

问题描述&#xff1a; 求出0&#xff5e;100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和确好等于该数本身&#xff0c;如:153&#xff1d;1^3&#xff0b;5^3&#xff0b;3^3&#xff0c;则153是一个“水仙花数”。 #in…

一个完全免费、私有且本地运行的搜索聚合器-FreeAskInternet

什么是 FreeAskInternet FreeAskInternet 是一个完全免费、私有且本地运行的搜索聚合器&#xff0c;使用 LLM 生成答案&#xff0c;无需 GPU。用户可以提出一个问题&#xff0c;系统将使用 searxng 进行多引擎搜索&#xff0c;并将搜索结果组合到 ChatGPT3.5 LLM 中&#xff0…

如何优雅的分析你的微信朋友圈和聊天记录

微信朋友圈、个人聊天记录、微信群聊天记录&#xff1a; 蓝奏云&#xff1a;链接:​www.lanzoub.com/b00rn0g47e 密码:9hww