离散化基础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
样例输入 #1
5
4000 201 11 45 11
样例输出 #1
4 3 1 2 1
1 #include<iostream> 2 #include<algorithm> 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 }
标签:11,201,int,45,c++,离散,109,例题 From: https://www.cnblogs.com/xuexue1234/p/lisanhualiti.html