离散化——化不可能为可能(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是烤的时间(几分熟). 顾客的烤肉可以分开烤,比如 ...
随机推荐
- 从构建分布式秒杀系统聊聊验证码 给大家推荐8个SpringBoot精选项目
前言 为了拦截大部分请求,秒杀案例前端引入了验证码.淘宝上很多人吐槽,等输入完秒杀活动结束了,对,结束了...... 当然了,验证码的真正作用是,有效拦截刷单操作,让羊毛党空手而归. 验证码 那么到底 ...
- <<Python基础教程>>学习笔记 | 第11章 | 文件和素材
打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #假设文件不在.会报以下错误: >>> f = open(r'D:\text ...
- SSM整合开发流程
我的spring是3.2,mybatis是3.4 1 引入user libarary,我的jar文件如下 //spring mvc core springMVC\spring-web-.RELEASE ...
- jQuery remove 内存 释放
解决方案(伪代码):(http://www.cnblogs.com/see7di/archive/2011/09/08/2239653.html)jQuery( “*”, obj).add([obj] ...
- 0046 @Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚
@Transactianal注解有一些属性,见Spring-Framework-Reference Table17.3 Transactional-settings @Transactional(pr ...
- myeclipse能启动tomcat但是用startup.bat无法启动
myeclipse能启动tomcat但是用startup.bat无法启动 这个问题困扰了我一天,把一天的周末时间白白花费了.各种百度,各种尝试都没办法解决.在江湖上闯,难道就只有百度一招吗? 不是,我 ...
- onActivityResult 通过case对不同情况进行处理
@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { switch (result ...
- java -jar Incompatible argument to function
原因分析:jar包版本问题 解决方法:到工程中查看代码引用的jar包版本是多少,然后升级jar包,就可以了!
- PHP标签
1.PHP原标签 2.脚本标签 3.短标签 需要short_open_tag=on,默认情况下为on 4.asp标签 需要asp_tags为on,默认为off
- spring-jmx.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...