数组的离散化
来源:互联网 发布:东方时尚网络授课 编辑:程序博客网 时间:2024/05/16 16:08
我们在处理数组问题时,如需要求逆序数,然而数据给的又特别大,此时我们就可以用数组的离散处理来解决了。
当数的范围比较大时需要进行离散化,即先排个序,再重新编号。如a[] = {10000000, 10, 2000, 20, 300},那么离散化后a[] = {5,
1, 4, 2, 3}。
附上代码:#include<cstdio>#include <iostream>#include<cstring>#include<algorithm>using namespace std;const int MAXN=500000+1000;int c[MAXN];struct node{ int v; int index; bool operator <(const node& b)const { return v<b.v; }}nodes[MAXN];int b[MAXN];//将初始数组重新赋值后 相对大小不变的新数组int main(){ int n; cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&nodes[i].v); nodes[i].index=i; } sort(nodes+1,nodes+n+1); memset(b,0,sizeof(b)); b[nodes[1].index]=1; for(int i=2;i<=n;i++) { if(nodes[i].v==nodes[i-1].v) b[ nodes[i].index ]=b[ nodes[i-1].index ]; else b[ nodes[i].index ]=i; } for(int i=1;i<=n;i++) cout<<b[i]<<endl;}
数据测试结果:
下面在介绍一种更简单的用STL来处理的离散化,这里要运用到lower_bound()函数,
代码:
#include <iostream>#include <algorithm>using namespace std;const int maxn=15;int main(){int n,i;int a[maxn],b[maxn],c[maxn];cin>>n;for(i=1;i<=n;i++){cin>>a[i];b[i]=a[i]; } sort(b+1,b+1+n); for(i=1;i<=n;i++) { c[i]=lower_bound(b+1,b+n+1,a[i])-b;}for(i=1;i<=n;i++)cout<<c[i]<<endl; system("pause");return 0;}
阅读全文
1 0
- 数组的离散化
- 树状数组的离散化 Ultra-QuickSort
- 树状数组--离散化
- Flowers&&树状数组+离散化
- hdu4417(离散化+树状数组)
- POJ2299 树状数组+离散化
- poj2299 树形数组&&离散化
- poj2299 离散化+树状数组
- hdu4325 树状数组+离散化
- hdu5372 离散化+树状数组
- poj2299 树状数组+离散化
- poj2299离散化,树状数组
- hdu5862树状数组 离散化
- hdu5877dfs,树状数组离散化
- poj2528 线段数组 离散化
- POJ2299 树状数组+离散化
- 工资管理 树状数组+离散化
- hdu 3743 Frosh Week (树状数组的离散化)
- 给java文件批量添加License信息
- python 访问mysql
- web前段入门 2017.6.8
- VSS(卷影拷贝服务)与snapshot优缺点及区别
- Java 工具类
- 数组的离散化
- 度度熊与邪恶大魔王
- JavaScript 什么是原型链?
- list_for_each_entry
- TabLayout实现顶部标题栏和底部导航栏,TrustyGridSimpleAdapter实现按日分类图片
- 看完让你彻底搞懂Websocket原理
- [NOIP2014][建图]寻找道路
- 图像均值滤波的CUDA并行化优化
- Java算法-插入排序