c++算法之离散化例题
阅读原文时间:2023年08月20日阅读:4

离散化基础2

给定 n 个元素的数列,将相同的数据离散化为一个数据(去重),即把 {4000,201,11,45,11}{4000,201,11,45,11} 离散化为 {4,3,1,2,1}{4,3,1,2,1}。

第一行一个整数 (1≤m≤105)n(1≤n≤105),为元素的个数。

第二行 n 个用空格隔天的整数 a[i](−109≤a[i]≤109)ai​(−109≤ai​≤109),为数列中的元素。

一行若干个整数,为离散化的结果,用一个空格隔开。

样例输入 #1

5
4000 201 11 45 11

样例输出 #1

4 3 1 2 1

1 #include
2 #include
3 using namespace std;
4 int a[101100],b[101100];
5 int main(){
6 int n;
7 cin >> n;
8 for(int i=1;i<=n;i++){ 9 cin >> a[i];//未排序
10 b[i]=a[i];//副本
11 }
12 sort(b+1,b+n+1);
13 int cnt=unique(b+1,b+n+1)-(b+1);
14 for(int i=1;i<=n;i++){ 15 //二分查找函数:>=a[i]的地址,“a[i]-b”就可以返回编号
16 a[i]=lower_bound(b+1,b+cnt+1,a[i])-b;
17 printf("%d ",a[i]);
18 }
19 return 0;
20 }

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章