c++离散化处理大范围和重复数据
关于离散化
有些新手可能会问:离散化是什么?离散化就是将无限空间中有限的个体映射到有限的空间里去。
上面的定义肯定会有人看不懂(其实我刚开始学的时候也看不懂)
用我自己的话来说,就是在不改变数据的相对大小的条件下,对数据进行相应的压缩
可能还是有人看不懂,没关系,我们来看一个例子,顺便来讲一下离散化的基本操作:
现有一个数组:1,100,2367,562,364737,19,1974832947,100,562,2367
如果按照正常的方法,该开1974832947的空间,但是经过离散化后,就不需要
那么step 1:排序
用上面的例子来说,就是将上面的数据排序并去重,得到下面这组数据:
1,19,100,100,562,562,2367,2367,364737,1974832947
然后step 2:通过unique去重使大小与下标对应,并得到去重后的长度,得到下面这组数据:
1,19,100,562,2367,364737,1974832947
接着step 3:通过lower_bound算出离散化后的排列,得到下面这组数据:
1,2,3,4,5,6,7
那么这里就很尴尬了,这组数据无法应用于初始数据
所以在开始,我们多定义1个数组,来记录初始情况下的数据,再用step 3与其进行对应。
最终得到答案:1,3,5,4,6,2,7,3,4,5
下面给出模板:
#include<bits/stdc++.h>
using namespace std;
int a[],b[],n;
int main()
{
ios::sync_with_stdio(false);
cin.tie();
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i];
b[i]=a[i];
}
sort(a+,a+n+);
int len=unique(a+,a+n+)-a-;
for(int i=;i<=n;i++)
b[i]=lower_bound(a+,a+len+,b[i])-a;
for(int i=;i<=n;i++) cout<<b[i]<<" ";
return ;
}
c++离散化处理大范围和重复数据的更多相关文章
- sql: having使用,及删除重复数据
写了好几年的sql,having语句基本上很少写,这就有一点尴尬了,现在总结一下having的作用,每日整理一下学习文档. having 通常伴随group by使用,过滤group by的数据集. ...
- 查询和删除表中重复数据sql语句
1.查询表中重复数据.select * from peoplewhere peopleId in (select peopleId from people group by ...
- MSSQL如何在没有主键的表中删除重复数据
为了对重复数据进行实验,下面建一个设计不太好(没有主键)表并插入了一些重复数据: create database testdb use testdb ; go create table DupsNoP ...
- Windows Server 2012重复数据删除技术体验
在企业环境中,对磁盘空间的需求是惊人的.数据备份.文件服务器.软件镜像.虚拟磁盘等都需要占据大量的空间.对此,微软在Windows Server 2012中引入了重复数据删除技术.重复数据删除技术通过 ...
- Oracle查询表里的重复数据方法:
一.背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. 二.解决 select id from group by id having count ...
- mysql查询表里的重复数据方法:
INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test ...
- 用excel处理重复数据
我们在处理数据时,重复数据常常会对分析造成很大麻烦,因此数据整理初期一个重要的工作是排重,excel2007以上版本中有一个删除重复项功常便捷,但是每次点来点去也很麻烦,下面我们用公式来对一些重复数据 ...
- oracle学习----去除表中的重复数据
重复的数据可能有这样两种情况,第一种:表中只有某些字段一样,第二种:两行记录完全一样.第一.对于部分字段重复数据的删除 先来谈谈如何查询重复的数据吧. 下面语句可以查询出那 ...
- Android开发之适配器-ListView适配器的重复数据
适配器是Android中的数据与View视图的桥梁,作用就是将数据通过适配器显示到对应的View视图上. 工作中,在用ListView做适配器数据时候,有些人肯定碰见过,如何优化效率,但是又出现重复数 ...
随机推荐
- CSS躬行记(7)——合成
在图形编辑软件中,可以按特定地方式处理不同图层的合成,最新的CSS规范也引入了该功能,并提供了mix-blend-mode和background-blend-mode两个属性.混合模式(blendin ...
- Caused by: java.io.IOException: Type mismath in vlaue from map: excepted org.apache.hadoop.io.InaWritable,received SC
解决办法: 看map和reduce的输入是不是对应,看看map和reduce设置的参数和下面的是否一致
- 0day堆(2)堆的调试实验
堆的调试实验 调试态堆管理策略和常态堆管理策略:前者只使用空表不用块表,不真实 使用调试器加载函数会触发前者 __asm int3 调试最真实的栈 未启用块表的堆区信息 堆区起始位置(假设为0x005 ...
- printf 参数检查 __attribute__((format(printf, 1, 2)))
With GCC, I can specify __attribute__((format(printf, 1, 2))) , telling the compiler that this funct ...
- Debugging Under Unix: gdb Tutorial (https://www.cs.cmu.edu/~gilpin/tutorial/)
//注释掉 #include <iostream.h> //替换为 #include <iostream> using namespace std; Contents Intr ...
- Mysql 查看被锁住的表
MYSQL 查看被锁住的表 -- 本文章仅用于学习,记录 当你在mysql 执行查询语句的时候,简单的一句查询语句却卡很久,一直转圈圈的时候,这时候你就需要怀疑数据库的哪些进程,哪些事物被锁住 ...
- centos6 yum安装jdk1.8+
一.环境Linux操作系统: centos6.9 安装jdk版本: jdk1.8+ 二.安装步骤1. 检查系统是否自带有jdk[root@VM_0_11_centos ~]# rpm -qa |gre ...
- java程序猿面试系列之jvm专题
前言 因为疫情的影响,现在都变成金五银六了.为了方便大家,在此开一个程序猿面试系列.总结各大公司所问的问题,希望能够帮助到大家,适合初中级java程序猿阅读. 1. Java类实例化时,JVM执行顺序 ...
- GoF23:单例模式(singleton)
目录 单例模式简介 常见五种单例模式的实现方式 饿汉式 懒汉式 DCL懒汉式 饿汉式改进(静态内部类式) 枚举单例 防止反射破坏单例模式 单例模式简介 核心作用:保证一个类只有一个实例,并且提供一个访 ...
- maven基本配置
1.maven 是一个项目构建工具,如果在公司做大的项目 ,需要把项目拆分成很多子项目,为了方便各子项目之间协同开发和调试,一般都会使用maven.使用maven和以前web项目最大的不同是jar包的 ...