离散化——化不可能为可能(STL)
所谓离散,就是化连续为不连续,使得我们某种枚举的方法得以实现。
当然,离散还能够帮助我们将某些数据范围很大达到2^16,但是这些数据并不多(例如才1000+),我们可以把数据进行离散,保持他们之间的相对大小。
例如这里有几个数:4865845,146384512,598745,896561634,4865845
我们先对数进行排序:598745,4865845,4865845,146384512,896561634
离散后就变成了:0,1,1,2,3(1,2,2,3,4也行)
我们不仅可以将很大的数据进行离散,对于要整型数据结构的,但我们操作的数据是小数的,我们也可以对其进行离散。
因此在这里 离散就是维护他们的相对大小,当然,保留原来的数据,我们可以将离散后的值和离散前的值进行相互映射。
离散的主要步骤:
1.排序
2.去重
3.离散
这里我们可以运用STL,从而实现代码短,易编写。
假设我们有三个数据:a[n],b[n],rank[n];(其中a[n]为将要离散的数组,b[n]为a[n]的备份,rank[n]用于排序后去重提供离散化的值(排名),n为数据个数)
sort(rank,rank+n);//先从小到大排序
int size=unique(rank,rank+n)-rank;//unique函数可去掉连续重复的字母,其中返回值是rank数组去重后实际最后一个数字的地址(具体可以百度一下)-rank中的rank指的是rank[0]的地址,可以联想快排里面rank+n的用法 这里size就是去重后数组的长度
for(int i=0;i<n;i++)
a[i]=lower_bound(rank,rank+size,a[i])-rank;//lower_bound返回第1个不小于a[i]的值的指针,离散后序列为0, 1, 2, ..., size - 1,如果想要1,2,3,...,size的话就+1或者用upper_bound,upper_bound返回第1个大于a[i]的值的指针 如果数组是从1开始的而不是0的话 只需要将rank改为(rank+1) 即
sort(rank+1,rank+n+1);
int size=unique(rank,rank+n)-(rank+1);
for(int i=0;i<n;i++)
a[i]=lower_bound(rank,rank+size,a[i])-(rank+1);
关于离散化后查询的问题
1.离散后的值为x,那么离散前的值就是rank[x];
2.离散前的下标为i,那么对应的离散后的值是a[i];
3.离散前的值为x,那么根据上面离散的方法即可求得离散后的值就是a[lower_bound(rank,rank+size,x)-rank]
离散是一种思想,有时候会有意想不到的效果。
离散化——化不可能为可能(STL)的更多相关文章
- Mayor's posters(线段树+离散化POJ2528)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 51175 Accepted: 14820 Des ...
- POJ 2528 Mayor's poster
主要是参考了这个博客 地址戳这儿 题目大意:n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000) .求出最后还能看 ...
- SPOJ:Collecting Candies(不错的DP)
Jonathan Irvin Gunawan is a very handsome living person. You have to admit it to live in this world. ...
- Sona && Little Elephant and Array && Little Elephant and Array && D-query && Powerful array && Fast Queries (莫队)
vjudge上莫队专题 真的是要吐槽自己(自己的莫队手残写了2个bug) s=sqrt(n) 是元素的个数而不是询问的个数(之所以是sqrt(n)使得左端点每个块左端点的范围嘴都是sqrt(n)) 在 ...
- Hash 算法与 Manacher 算法
目录 前言 简单介绍 简述 Hash 冲突 离散化 基本结构 普通 Hash 简述 例题 字符串 Hash 简单介绍 核心思想 基本运算 二维字符串 Hash 例题 兔子与兔子 回文子串的最大长度 后 ...
- R语言︱噪声数据处理、数据分组——分箱法(离散化、等级化)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 分箱法在实际案例操作过程中较为常见,能够将一些 ...
- 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理
http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客 bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...
- UVa 221 Urban Elevations 城市正视图 离散化初步 无限化有限
转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 题目大意: 题目传送门:UVa 221 Urban Elevations 给出城市中建筑物的x, ...
- HDU2883 kebab(最大流判断满流 + 离散化 + 区间化点)
[题意]: 有一个烤箱,烤箱在一个时刻最多考M个肉串,N个顾客,每个顾客有属性s,n,e,t s是来的时间,n是想要的肉串数量,e是最晚离开的时间,t是烤的时间(几分熟). 顾客的烤肉可以分开烤,比如 ...
随机推荐
- SuperMap iClient如何使用WMTS地图服务
SuperMap iClient如何使用WMTS地图服务 什么是WMTS服务 WMTS,切片地图Web服务(Web Map Tile Service)当前版本是1.0.0.该服务符合 OGC(Open ...
- Shell 脚本修改 Mac IP地址
本篇文章由:http://xinpure.com/shell-script-to-modify-the-mac-ip-address/ 麻烦事 最近在笔记本 WIFI 网络上遇到一个麻烦事, 在公司需 ...
- angular过滤器使用 自定义过滤器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- JS JSOP跨域请求实例详解
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.这篇文章主要介绍了JS JSOP跨域请求实例详解的相关资料,需要的朋友可以参考下 ...
- PT100三线制恒流源接法
http://www.eepw.com.cn/article/189480_2.htm 下图为恒流源激励的三线制Pt100的一种典型接法.其基本原理是假设Pt100的三条引线采用相同长度的同型线缆,具 ...
- 基于vue实现百度离线地图
基于vue实现百度离线地图 1. 百度地图API文件获取 有网络 的情况下,需引入百度地图API文件.如下: <script type="text/javascript" s ...
- linux 批量替换内容
sed -i "s/被替换的内容/替换的内容/g" `grep "被替换的内容" -rl 目录` -r = 搜索下级目录
- 点滴积累【JS】---JS小功能(JS实现多物体缓冲运动)
效果: 思路: 利用setInterval计时器进行运动,offsetWidth实现宽度的变动,在用onmouseover将终点和所选中的DIV放入参数再进行缓冲运动. 代码: <head ru ...
- TypesMethodsAndFields
https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields Types dalvik's bytecode has two major ...
- redis命令_SETNX
SETNX key value 将 key 的值设为 value ,当且仅当 key 不存在. 若给定的 key 已经存在,则 SETNX 不做任何动作. SETNX 是『SET if Not eXi ...