算法学习系列(九):离散化

目录

  • 引言
  • 一、离散化概念
  • 二、离散化模板
  • 三、例题
  • 四、测试

引言

这个离散化我的理解就是你如果要用到数组的下标进行存数,会有多个询问针对下标进行操作,然后这个下标特别的大,而且存的数也是特别的分散,举个例子就是有三个数,1,2,3,它们对应的下标分别为1,10000,1e9,所以如果开那么大的数组肯定浪费了,而且可能会爆内存,然后就需要离散化了,那么进入正题吧!

一、离散化概念

引入离散化的背景已经在引言里说过了,离散化就是把要用到的所有的下标,从1开始按顺序排好,然后存到数组中,也就是给原来的下标填了一层映射关系,之后所有要用到下标的地方都通过映射找到其对应的下标,这就是离散化了,然后注意的一点就是离散化后的下标是从1开始的。

二、离散化模板

vector<int> alls;  //存的所有要用到的下标
sort(alls.begin(),alls.end());  //按下标的大小排序
alls.erase(unique(alls.begin(),alls.end()), alls.end());  //去重int find(int x)  //找到原来下标x的值在alls里的下标
{int l = 0, r = alls.size() - 1;while(l < r){int mid = l + r >> 1;if(alls[mid] >= x) r = mid;else l = mid + 1;}return r + 1;
}

三、例题

假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。
接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r] 之间的所有数的和。输入格式
第一行包含两个整数 n 和 m。接下来 n 行,每行包含两个整数 x 和 c。再接下来 m行,每行包含两个整数 l 和 r输出格式
共 m 行,每行输出一个询问中所求的区间内数字和。数据范围−109≤x≤109,1≤n,m≤105,109≤l≤r≤109,10000≤c≤10000输入样例:
3 3
1 2
3 6
7 5
1 3
4 6
7 8输出样例:
8
0
5
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;typedef pair<int,int> PII;
#define x first
#define y secondconst int N = 3e5+10;int n, m;
int a[N], s[N];
vector<int> alls;
vector<PII> adds, query;int find(int x)
{int l = 0, r = alls.size() - 1;while(l < r){int mid = l + r >> 1;if(alls[mid] >= x) r = mid;else l = mid + 1;}return r + 1;
}int main()
{cin >> n >> m;for(int i = 0; i < n; ++i){int x, c;cin >> x >> c;alls.push_back(x);adds.push_back({x,c});}for(int i = 0; i < m; ++i){int l, r;cin >> l >> r;alls.push_back(l);alls.push_back(r);query.push_back({l,r});}sort(alls.begin(), alls.end());alls.erase(unique(alls.begin(),alls.end()), alls.end());for(auto item: adds){int x = find(item.x);a[x] += item.y;}for(int i = 1; i <= alls.size(); ++i) s[i] = s[i-1] + a[i];for(auto item: query){int l = find(item.x), r = find(item.y);cout << s[r] - s[l-1] << endl;}return 0;
}

四、测试

可以看出是通过了的,然后也AC了
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

PS里面怎么提取图上要的颜色然后用到另一个部位去

PS里面要提取图上要的颜色然后用到另一个部位去&#xff0c;具体步骤如下&#xff1a; 在ps里打开特定的图像文件&#xff1b; 想要提取图上的哪个颜色&#xff0c;就使用”吸管工具“在图上特定的位置上点击一下&#xff0c;就会看到前景色变成了相应的颜色&#xff1b; 然…

DshanMCU-R128s2 USB 外设功能配置

USB 功能简介 USB 功能模块包括了USB Host&#xff0c;USB Device 和OTG 功能。 USB Host 目前已经支持上的功能有&#xff1a;Mass Storage&#xff0c;UVC。 USB Device 目前已经支持上的功能有&#xff1a;ADB&#xff0c;UAC。 OTG 主要用作Host 与Device 的切换&#…

【送书福利-第三十一期】《区块链安全理论与实践(安全技术经典译丛)》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

过采样技术基本原理

本文介绍过采样技术基本原理。 过采样技术在ADC信号采集过程中使用还是比较多的。某些使用场景下&#xff0c;对采样速度要求并不是那么高&#xff08;或ADC采样速度过剩&#xff09;&#xff0c;但是想要获取较高的分辨率&#xff0c;就会用到这种技术&#xff0c;如针对温度…

Java设计模式之单例模式以及如何防止通过反射破坏单例模式

单例模式 单例模式使用场景 ​ 什么是单例模式&#xff1f;保障一个类只能有一个对象&#xff08;实例&#xff09;的代码开发模式就叫单例模式 ​ 什么时候使用&#xff1f; 工具类&#xff01;&#xff08;一种做法&#xff0c;所有的方法都是static&#xff0c;还有一种单…

C++之深拷贝进阶

目录 拷贝构造函数的深拷贝进阶版本 赋值运算符重载的深拷贝进阶 总结 上期我们学习了C中深拷贝的传统版本&#xff0c;今天我们将学习更为高效的版本。 拷贝构造函数的深拷贝进阶版本 传统版本代码如下&#xff1a; string(string& s):_str(new char[strlen(s._str) …

Mybatis3系列课程8-带参数查询

简介 上节课内容中讲解了查询全部, 不需要带条件查, 这节我们讲讲 带条件查询 目标 1. 带一个条件查询-基本数据类型 2.带两个条件查询-连个基本数据类型 3.带一个对象类型查询 为了实现目标, 我们要实现 按照主键 查询某个学生信息, 按照姓名和年级编号查询学生信息 按照学生…

C语言中的关键字

Static 静态局部变量 结果&#xff1a; a作为静态局部变量&#xff0c;第一次进入该函数的时候&#xff0c;进行第一次变量的初始化&#xff0c;在程序整个运行期间都不释放。&#xff08;因为下一次调用还继续使用上次调用结束的数值&#xff09; 但是其作用域为局部作用域&…

深入理解 JavaScript 函数:提升编程技能的必备知识(中)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

基于kubernetes实现PaaS云平台-rancher

基于Rancher实现kubernetes集群管理 一、Rancher介绍 1.1 Rancher Rancher 是一套容器管理平台&#xff0c;它可以帮助组织在生产环境中轻松快捷的部署和管理容器。Rancher可以轻松地管理各种环境的 Kubernetes&#xff0c;满足IT需求并为 DevOps 团队提供支持。 Rancher 用…

JUC并发编程 08——原子操作类

目录 一.原子更新基本类型类 实现原理 二.原子更新数组 三.原子更新引用类型 四.原子更新字段类 Java从JDK1.5开始提供了J.U.C下的atomic包&#xff0c;atomic包提供了一系列的操作简单&#xff0c;性能高效&#xff0c;并能保证线程安全的类去更新基本类型变量&#xff0…

数字图像处理-空间域图像增强-爆肝18小时用通俗语言进行超详细的总结

目录 灰度变换 直方图&#xff08;Histogram&#xff09; 直方图均衡 直方图匹配&#xff08;规定化&#xff09; 空间滤波 低通滤波器 高通滤波器 ​​​​​​​ 本文章讲解数字图像处理空间域图像增强&#xff0c;大部分内容来源于课堂笔记中 灰度变换 图像增强&…