离散化c++

应用于数字取值范围很大,但数字个数很少的情况,原理是将要用到的数字放到一个连续的数组中,通过一个函数find得到数字和存放在数组中的下标的映射关系。

其中find函数的实现可以通过二分查找来实现;

练习题:
题意:

假定有一个无限长的数轴,初始时数轴的下标权威0,现在,首先进行n次操作,将位置为x的地方加上c,然后接下来有m次询问,每次询问包含两个整数l,r。我们要求的是[ l , r ] [l,r][l,r]区间里面的和

输入格式:

第一行两个数n和m;

接下来n行每行两个数x,c;

最后m次询问每行两个数l,r;

数据范围:

− 1 0 9 -10^9−10 
9
 <=x xx<=− 1 0 9 -10^9−10 
9
 

1<=n , m n,mn,m<=1 0 5 10^510 
5
 

− 1 0 9 -10^9−10 
9
 ​<=l ll<=r rr<=− 1 0 9 -10^9−10 
9
 ​

− 10000 -10000−10000<=c cc<=10000 1000010000

vector<int>all; //存放下标
int find(int x)
{int l = 0, r = all.size();while (l < r){int mid = l + r >> 1;if (all[mid] >= x)r = mid;else l = mid + 1;}return r + 1;//下标从一开始
}int main()
{// vector<vector<int>>routes = { {1,2,7} ,{3,6,7} };// numBusesToDestination(routes, 1, 6);vector<int>arr = { 200,100,300,500 };  //数字位置vector<int>arr1 = { 2,4,1,5 };         //获得的值vector<vector<int>>finds = { {1,3},{100,201},{0,1000},{300,499} };int add[100] = { 0 }; //存放数值离散后的位置vector<pair<int, int>>num;//存放数字和获得的值queue<pair<int, int>>qn;//存放查找信息int s[100] = { 0 };//存放和的数组for (int i = 0; i < arr.size(); i++){all.push_back(arr[i]);num.push_back({ arr[i],arr1[i] });}for (int i = 0; i < finds.size(); i++){all.push_back(finds[i][0]);all.push_back(finds[i][1]);qn.push({ finds[i][0],finds[i][1] });}sort(all.begin(), all.end());all.erase(unique(all.begin(), all.end()), all.end());//去重for (int i = 0; i < num.size(); i++){int x = num[i].first, c = num[i].second;add[find(x)] += c;}for (int i = 1; i <=all.size(); i++){s[i] = s[i - 1] + add[i];}while(qn.size()){auto e = qn.front();qn.pop();int l = find(e.first), r = find(e.second);cout << s[r] - s[l - 1] << endl;}}

首先将所有要用到的数存放在数组all中,并且进行去重和排序,方便后续用二分查找得到相对于的下标,然后用一个num数组,存放数字和该位置变换的大小,后续会在前缀和数组中用到,简化在l到r区间大小的计算。再用一个队列存放查找的l,r,用于后续求解。add数组存放离散化后的数字对应变化,与前面不同的是,此处是利用find联系离散前和离散后数字的下标,然后找到相应位置加上数字,再利用sum求前缀和,这样l到r区间的变化就可以用s[r]-s[l-1]来实现。find中r+1是想要从下标为1的地方开始,方便求前缀和。

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

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

相关文章

Python 类型提示全解析:从入门到精通的必备技巧(如何让Python代码更清晰、错误更少)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 什么是类型提示?📝 类型提示的基本用法📝 高级用法📝 类型提示的工具和技巧📝 注意事项和最佳实践⚓️ 相关链接 ⚓️📖 介绍 📖 在编程的世界里,代码的清晰和可维护性是成功的关键。尤其是在 …

C++——关联式容器(5):哈希表

7.哈希表 7.1 哈希表引入 哈希表的出现依旧是为了查找方便而设计的。在顺序结构中&#xff0c;查询一个值需要一一比较&#xff0c;复杂度为O(N)&#xff1b;在平衡树中&#xff0c;查询变为了二分查找&#xff0c;复杂度为O(logN)&#xff1b;而对于哈希表&#xff0c;我们可…

SpringBoot简易商品管理系统

> 这是一个基于SpringBootThymeleaf实现的简易商品管理系统。 > 包含基本的登录/注册与商品管理功能。 > 界面简洁美观&#xff0c;代码结构清晰&#xff0c;适用于JAVA初学者在此基础上进行二次开发。 一、项目演示 二、技术框架 框架描述Spring Boot容器管理 S…

毫米波雷达预警功能 —— 开门预警(DOW)

文档声明&#xff1a; 以下资料均属于本人在学习过程中产出的学习笔记&#xff0c;如果错误或者遗漏之处&#xff0c;请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。 笔记资料仅供学习交流使用&#xff0c;转载请标明出处&#xff0c;谢谢配…

16代现场实拍图

64*32 全彩 LED 点阵显示屏 无线通信868M&#xff0c;跳频通信 通信速率200K/50K 覆盖20-30米以上的通信半径 尺寸&#xff1a;192*96mm 供电方式&#xff1a;24V外置电源 储存温度&#xff1a;-40℃~80℃ 工作温度&#xff1a;-20℃~50℃ 自定义双向通信协议&#xff…

工业无线路由器组网方案:简单方便的工业组网方案

​一、项目背景 随着工业互联网的发展&#xff0c;越来越多的企业开始寻求高效、稳定的网络解决方案&#xff0c;以支持其生产和管理的数字化转型。工业无线路由器在这一过程中扮演着重要的角色。本文将详细介绍基于星创易联SR500工业无线路由器的组网方案&#xff0c;适用于制…

解锁2024年翻译在线Top4,让每一次交流都精准无误

现在世界就像个大家庭&#xff0c;交流多了&#xff0c;语言不通就成了问题。有道翻译在线就像桥梁&#xff0c;帮我们和全世界的朋友沟通。对企业来说&#xff0c;翻译准确太重要了&#xff0c;一句话翻错可能损失巨大。有道翻译在线技术强&#xff0c;各种语言都能搞定&#…

亲测好用,ChatGPT 3.5/4.0新手使用手册,最好论文指令手册~

本以为遥遥领先的GPT早就普及了&#xff0c;但小伙伴寻找使用的热度一直高居不下&#xff0c;其实现在很简单了&#xff01; 国产大模型快200家了&#xff0c;还有很多成熟的国内AI产品&#xff0c;跟官网一样使用&#xff0c;还更加好用~ ① 3.5 大多数场景是够用的&#xff…

【贪心算法】贪心算法二

贪心算法二 1.最长递增子序列2.递增的三元子序列3.最长连续递增序列 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.最长递增子序列 题目链…

从零基础到大模型大师,看完这篇,效率提高99%!!

一、 前置知识 - 数学&#xff1a;主要包括线性代数、概率统计等内容。 - 自然语言处理&#xff1a;主要包括Word2vec、Seq2seq等内容。 - Python&#xff1a;Python语言是大模型应用的编程基础&#xff0c;需要熟练掌握深度学习相关的框架&#xff0c;如PyTorch、TensorFlow。…

【C++ Primer Plus习题】17.1

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> using namespace std;int main() {char …

智慧城市主要运营模式分析

(一)运营模式演变 作为新一代信息化技术落地应用的新事物,智慧城市在建设模式方面借鉴了大量工程建设的经验,如平行发包(DBB,Design-Bid-Build)、EPC工程总承包、PPP等模式等,这些模式在不同的发展阶段和条件下发挥了重要作用。 在智慧城市发展模式从政府主导、以建为主、…

[数据集][目标检测]中草药类型识别检测数据集VOC+YOLO格式7976张45类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;7976 标注数量(xml文件个数)&#xff1a;7976 标注数量(txt文件个数)&#xff1a;7976 标注…

音乐项目,总结

今天的写的思路都挺简单的但是比较繁琐&#xff0c;这个查找&#xff0c;传文件的话可以了&#xff0c;但是没有用分片传送&#xff0c;然后在写音乐播放的处理&#xff0c;<歌单&#xff0c;二级评论&#xff0c;歌曲歌词滚轮播放>三个还没有实现&#xff0c;时间挺紧张…

[Angular] 从零开始使用 Angular CLI 创建 Angular 项目

一、安装 Node.js &#x1f4da; Node.js 是一个运行 JavaScript 代码的 JavaScript 运行时&#xff0c;它允许我们在服务器端运行 JavaScript 代码。以下是安装 Node.js 的步骤&#xff1a; &#x1f310; 访问 Node.js 国内网站&#xff1a;https://nodejs.cn/ &#x1f4…

【2023工业图像异常检测文献】SimpleNet

SimpleNet:ASimpleNetworkforImageAnomalyDetectionandLocalization 1、Background 图像异常检测和定位主要任务是识别并定位图像中异常区域。 工业异常检测最大的难题在于异常样本少&#xff0c;一般采用无监督方法&#xff0c;在训练过程中只使用正常样本。 解决工业异常检…

【CSS in Depth 2 精译_034】5.4 Grid 网格布局的显式网格与隐式网格(下)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

Qt-QTextEdit的输入类控件(30)

目录 描述 相关属性 相关信号 使用 文本内容改变时触发 选中内容时发生改变 光标位置发生改变时触发 可复制&#xff0c;可撤销&#xff0c;可恢复发生改变时触发 undo撤销 redo恢复 copy复制 描述 这是一个多行输入框 有两个很像的&#xff0c;需要注意一下&…

边缘计算网关在工业中的应用

在工业4.0和智能制造的浪潮中&#xff0c;边缘计算网关扮演着至关重要的角色。AIoTedge边缘计算网关&#xff0c;作为工业互联网的关键组件&#xff0c;通过其强大的数据处理能力和智能分析功能&#xff0c;正在改变工业生产的面貌。 边缘计算网关的定义与角色 边缘计算网关是…

Python学习——【4.3】数据容器:str字符串

文章目录 【4.3】数据容器&#xff1a;str字符串一、再识字符串二、字符串的下标&#xff08;索引&#xff09;三、字符串的常用操作四、字符串的遍历五、字符串的特点 【4.3】数据容器&#xff1a;str字符串 一、再识字符串 虽然之前已经学习过字符串&#xff0c;但此处我们需…