(」・ω・)」うー!(/・ω・)/にゃー!
——潜行吧奈亚子

离散化

离散化

思路

数据的范围非常大或者其中含有负数,但数据本身的个数并不是很多(远小于数据范围)。在这种情况下,如果每个数据元素的具体值并不重要,重要的是他们之间的大小关系的话,我们可以先对这些数据进行离散化,使数据中的最大值尽可能小且保证所有数据都是正数

代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int a[100], b[100], n, m;
    cin >> n;
    for (int i = 1; i <= n; i ++) 
    {
	cin >> a[i];
	b[i] = a[i];	//把数组复制一份
    }
    sort(a + 1, a + n + 1);//先排序
    int size = unique(a + 1, a + n + 1) - a - 1;//去重
    for (int i = 1; i <= n; i ++) 
    {
	b[i] = lower_bound(a + 1, a + size + 1, b[i]) - a;//确定序号
    }
    for (int i = 1; i <= n; i ++) 
    {
  	cout << b[i] << " ";//输出,可有可无,一般是存储并进行操作
    }
    return 0;
}
posted @ 2021-12-25 22:12  GalaxyOier  阅读(7)  评论(0)    收藏  举报