什么是离散化?

离散化

  • 题目

你会这个题 吗?

题目

假定有一个无限长的数轴,数轴上每个坐标上的数都是 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 () …

昇思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…

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…

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

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

浅析C++引用

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

【Python】一文向您详细介绍 np.inner()

【Python】一文向您详细介绍 np.inner() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;曾…

JavaWeb系列二十二: 线程数据共享和安全(ThreadLocal)

韩顺平-线程数据共享和安全ThreadLocal 什么是ThreadLocal?ThreadLocal环境搭建ThreadLocal快速入门ThreadLocal源码阅读threadLocal.set()源码threadLocal.get()源码 什么是ThreadLocal? ThreadLocal的作用: 可以实现在同一个线程数据共享, 从而解决多线程数据安全问题.Thr…

小阿轩yx-Haproxy搭建Web群集

小阿轩yx-Haproxy搭建Web群集 Haproxy 简介 提供高可用性 能做出标准的负载均衡 支持虚拟主机 具备健康检查能力 能用于各式各样的代理 轻量级代理环境 解决方案优势 免费 快速 可靠 特性 特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或…

前端面试题24(css3)

下面是一些常见的 CSS3 面试题&#xff0c;这些问题可以帮助你评估应聘者对 CSS3 的掌握程度&#xff1a; 1. 解释 CSS3 中的动画关键帧&#xff08;keyframes&#xff09;和它们是如何工作的&#xff1f; 回答要点&#xff1a;keyframes 规则用于创建动画&#xff0c;它可以…

后端之路——文件本地上传

一、基础原理 文件上传是一个很基础的知识点&#xff0c;尤其是本地上传&#xff0c;在现实开发基本都是云上传&#xff0c;但是作为一个基础要简单了解一下 首先前端我就不多讲解了&#xff0c;网页开发里用<form>表单可以上传文件&#xff0c;只需要加上这三属性&…

pytest系列——pytest_runtest_makereport钩子函数获取测试用例执行结果

前言 pytest测试框架提供的很多钩子函数方便我们对测试框架进行二次开发&#xff0c;可以根据自己的需求进行改造。 例如&#xff1a;钩子方法&#xff1a;pytest_runtest_makereport &#xff0c;可以更清晰的了解测试用例的执行过程&#xff0c;并获取到每个测试用例的执行…

(译文)IRIG-B对时编码快速入门

原文 PDF&#xff1a;https://ww1.microchip.com/downloads/aemDocuments/documents/FTD/tekron/tekronwhitepapers/221223-A-guide-to-IRIG-B.pdf IRIG-B3 概论 Inter-Range Instrument Group 时间码&#xff08;简称IRIG&#xff09;是一系列标准时间码格式。用于将时间信…

使用Cloudflare免费开启全站https配置SSL证书

HTTPS 我的服务器和域名是在华为云&#xff0c;华为云SSL证书巨贵&#xff0c;通过Cloudflare可以将自己的网站免费设置成https。 Cloudflare注册 访问Cloudflare, 注册账号。 添加站点 添加你自己的站点&#xff0c;选择免费的套餐。 添加DNS 添加你的域名、子域名、…

PCB阻抗控制为何如此重要?

或许你在各个厂商打PCB板的时候&#xff0c;会遇到询问你是否需要阻抗的的下单需求&#xff1f; 在当今的应用中&#xff0c;设计通常变得越来越快&#xff0c;控制布局参数比以往任何时候都更加重要。 在PCB设计和生产过程中&#xff0c;有几种方法可以进行阻抗控制。最常见的…

轻松转换!两款AI工具让word秒变ppt!

想把Word文档一键生成PPT&#xff0c;过去有一个很常见的做法&#xff1a;先在Word文档中设置标题样式&#xff0c;通过标题样式来分隔每一部分&#xff0c;之后导出为PPT&#xff0c;就能得到一份PPT的雏形&#xff0c;但这种方法无法对PPT自动进行美化&#xff0c;即得到的只…