什么是离散化?

离散化

  • 题目

你会这个题 吗?

题目

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

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

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

输入格式

第一行包含两个整数 n n n m m m

接下来 n n n 行,每行包含两个整数 x x x c c c

再接下来 m m m 行,每行包含两个整数 l l l r r r

输出格式

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

数据范围

− 1 0 9 ≤ x ≤ 1 0 9 -10^9 \le x \le 10^9 109x109,
1 ≤ n , m ≤ 1 0 5 1 \le n,m \le 10^5 1n,m105,
− 1 0 9 ≤ l ≤ r ≤ 1 0 9 -10^9 \le l \le r \le 10^9 109lr109,
− 10000 ≤ c ≤ 10000 -10000 \le c \le 10000 10000c10000

输入样例:

3 3
1 2
3 6
7 5
1 3
4 6
7 8

输出样例:

8
0
5

由于这个题目当中的位置(比如 x, l, r)的大小都是10的9次方的级别,开数组是开不了那么大的。

而这些需要用到的位置的个数加起来有 n + 2*m个的,n 和 m 都是10的5次方的级别的。

所以所有的数字都非常的 散 在 坐标轴上,密度非常低。

所以离散化就是将所有需要用到 的坐标挤在一起,中间没有一个空位。


准备阶段:
在这里插入图片描述

本题的思路是:

  1. 将所有用到的位置坐标存到alls容器,将n次操作的 x 和 c 存到adds容器当中,将m次询问的 l 和 r 存到query 容器当中
  2. 将alls 容器内的元素 排序、去重。
  3. 将alls容器内的位置映射到 数组a上
  4. 遍历 adds 容器内元素 进行 n 次操作
  5. 求数组 a 的前缀和数组 放到 数组 s 当中。
  6. 遍历 query 容器,进行 m 次查询

操作1:
在这里插入图片描述


操作2:

在这里插入图片描述
用到sort 和 unique 记得包含头文件


操作3:

对于映射操作我们需要写一个 find 函数,其功能是给一个 alls容器内一个位置,返回一个映射到数组 a 上的一个位置。

在这里插入图片描述
这里其实就是 把 alls 容器里的 位置转换成了他们自己的坐标 + 1.

+1的原因是 因为后面要求前缀和,所以 从1开始会方便很多。


操作4:
执行 n 次操作
在这里插入图片描述


操作5:

求前缀和数组
在这里插入图片描述


操作6:

执行 m 次询问 ,公式 s[ r ] - s[ l - 1 ]
在这里插入图片描述

完整代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;const int N = 3e5+10;//需要用到位置的数量int n, m;
int a[N], s[N];typedef pair<int, int> PII;//省代码
vector<int> alls;//存储所有位置
vector<PII> adds;//存储n次操作
vector<PII> query;//存储m次询问int find(int x)
{int i = 0, j = alls.size() - 1;while (i < j){int mid = (i + j + 1) >> 1;if (alls[mid] <= x) i = mid;else j = mid - 1; }return i+1;
}int main()
{//存储scanf("%d%d", &n, &m);while (n --){int x, c;scanf("%d%d", &x, &c);adds.push_back({x, c});alls.push_back(x);//alls 只需要位置}while (m --){int l, r;scanf("%d%d", &l, &r);query.push_back({l, r});alls.push_back(l);alls.push_back(r);}//------------------------//排序、去重sort(alls.begin(), alls.end());//排序alls.erase(unique(alls.begin(), alls.end()), alls.end());//去重 unique 可以将重复的数字放到容器的后面并返回第一个//            重复的数字的迭代器//------------------------//执行 n 次操作for (auto seg: adds){a[find(seg.first)] += seg.second;//一定注意要find}//求数组 a 的前缀和数组for (int i = 1; i <= alls.size(); i++) s[i] = s[i-1] + a[i];//执行 m 次询问for (auto seg: query){int l = find(seg.first);int r = find(seg.second);printf("%d\n", s[r] - s[l-1]);}return 0;}

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

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

相关文章

第十二节 设置默认文本提示

原型中我们常会用到文本框默认提示一些文本&#xff0c;获取焦点后消失文本提示&#xff0c;那如何实现呢&#xff1f;请看下面这个简单案例。 一、添加文本框也可以是矩形或者其他元件 二、添加文本样式 三、设置提示文本 四、元件获取焦点时将以隐藏提示 五、看效果 默认提示…

ShardingSphereConnection@4691d] will not be managed by Spring

boot整合分库分表后启动执行&#xff0c;提示链接不被spring管理&#xff0c; 应该看自己需要&#xff0c; 解决&#xff1a;

vue3+ts 重复参数提取成方法多处调用以及字段无值时不传字段给后端

参数提取前的写法&#xff0c;此写法值为空的时候也会传空字段给后端 会把无值的空字段传给后端 修改后的写法&#xff0c;不会把没有值的字段传给后端 // 列表和导出需要传给后端的公共参数&#xff08;加 || undefined即可过滤空字段&#xff09; const getCurentParam () …

【Cesium开发实战】电子围栏功能的实现,可自定义高度

Cesium有很多很强大的功能&#xff0c;可以在地球上实现很多炫酷的3D效果。今天给大家分享一个可自定义高度的电子围栏。 1.话不多说&#xff0c;先展示。 电子围栏 2.设计思路 点击绘制&#xff0c;在地图上可绘制多个点位&#xff0c;双击结束绘制&#xff0c;可对电子围栏…

债券一级市场、二级市场介绍

债券市场可以分为一级市场和二级市场&#xff0c;它们分别在债券发行和交易中扮演着不同的角色。 债券一级市场 一级市场是指债券的初级发行市场。在这个市场上&#xff0c;债券发行人&#xff08;如政府、企业等&#xff09;通过中介机构&#xff08;如银行、证券公司等&…

昇思25天学习打卡营第14天|Pix2Pix实现图像转换

Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c;可以实现语义/标签到真实图片、灰度图到彩色图、航空图到…

leetcode--二叉搜索子树的最大键值和

leetcode地址&#xff1a;二叉搜索子树的最大键值和 给你一棵以 root 为根的 二叉树 &#xff0c;请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下&#xff1a; 任意节点的左子树中的键值都 小于 此节点的键值。 任意节点的右子树中的键值都 大于 此节点的键值…

IOC、DI<4> Unity

IOC&#xff08;&#xff09;&#xff1a;控制反转&#xff0c;把程序上层对下层的依赖&#xff0c;转移到第三方的容器来装配 是程序设计的目标&#xff0c;实现方式包含了依赖注入和依赖查找&#xff08;.net里面只有依赖注入&#xff09; DI&#xff1a;依赖注入&#xff0c…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(一)一些样式的调整使用

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、比如下面的发起人双击后出现的界面不正常&#xff0c; 看它的样式主要是这个里面的margin-left应该太小了&#xff0c; [data-v-45b533d5] .el-tabs__content { margin-top: 50px;mar…

多商户酒店预定SAAS系统(APP):云端革新引领行业未来

在数字化转型的浪潮中&#xff0c;酒店行业正经历着前所未有的变革。多商户酒店预定SAAS系统&#xff08;APP&#xff09;作为一种创新的解决方案&#xff0c;为酒店提供了一个集中化、高效、灵活的在线预订和管理平台。 SAAS系统的核心价值 SAAS系统通过云端服务&#xff0c…

7.1作业6

uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h" //rcc/gpio/uart4初始化 void hal_uart4_init(); //发送一个字符 void hal_put_char(const char s…

在C++中暂停程序的几种方法

在开发C应用程序时&#xff0c;有时需要让程序暂停一段时间。例如&#xff0c;你可能需要等待某个操作完成&#xff0c;或是为用户提供某种延迟。在C中&#xff0c;有多种方法可以实现这一需求。 1. 使用 std::this_thread::sleep_for (C11及以上版本) std::this_thread::sle…

【JavaScript脚本宇宙】XML和HTML解析库大揭秘:快速选出最适合你的工具

解析XML和HTML文档&#xff1a;六大常用库功能对比 前言 在现代的Web开发中&#xff0c;处理XML和HTML文档是一个常见的任务。为了更加高效地解析和操作这些文档&#xff0c;开发人员通常会使用各种库和工具。本文将介绍几个流行的XML和HTML解析库&#xff0c;分别对其功能、…

wzoi.cc基数排序AC代码(含链接)

题目描述: 基数排序是一种并不基于关键字间比较和移动操作的排序算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。 通过对每一个关键字分别依次进行排序&#xff0c;可以令整个关键字序列得到完整的排序。 在本题中&#xff0c;读入一串16位&…

react native中依赖@react-native-clipboard/clipboard库实现文本复制以及在app中获取复制的文本内容

react native中依赖react-native-clipboard/clipboard库实现文本复制以及在app中获取复制的文本内容 第三方库 第三方库 react-native-clipboard 我的项目react native0.72 我使用react-native-clipboard/clipboard1.13.2 npm install --save react-native-clipboard/clipboa…

留学Essay写作能够顺利拿“A”吗?

对于留学生来说Essay难度不可谓不大&#xff0c;很多同学刚到国外留学的时候都会被Essay难倒一大片&#xff0c;可见Essay写作的难度&#xff0c;当然了&#xff0c;不乏有留学生会选择Essay写作&#xff0c;这其实也是无可厚非的。那么Essay写作想拿高分需要注意哪些呢&#x…

香橙派编译linux内核支持ebpf和虚拟WIFI

前言 上一篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)中说了怎么运行redroid&#xff0c;这篇补一下怎么修改参数编译内核。 补充 上篇文章有个内容需要补充一下&#xff1a;更新完内核需要用下面的命令防止内核被apt更新&#xff0c;不然后面使用apt update又回…

浅析C++引用

浅析C引用"&" ​ C中引入了一个新的语言特性——引用(&)&#xff0c;它表示某一对象的别名&#xff0c;对象与该对象的引用都是指向统一地址。那么我们就来看看关于引用的一些知识点吧&#x1f9d0; 特性 引用在定义时必须初始化一个变量可以有多个引用引…

【Tools】了解人工通用智能 (AGI):未来的智能体

什么是人工通用智能 (AGI)&#xff1f; 人工通用智能&#xff08;Artificial General Intelligence&#xff0c;AGI&#xff09;是指一种能够理解、学习和应用知识&#xff0c;具有像人类一样广泛和通用的认知能力的智能系统。与专门处理特定任务的人工智能&#xff08;AI&…

如何设计一个高可扩展的分布式架构?

如何设计一个高可扩展的分布式架构&#xff1f; 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言&#xff1a;分布式架构的重要性 随着互联网应用的发展&#xff0c;单一服务器往往难以满足…