给定 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),为数列中的元素。
一行若干个整数,为离散化的结果,用一个空格隔开。
5
4000 201 11 45 11
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 }
手机扫一扫
移动阅读更方便
你可能感兴趣的文章