c语言 离散化

题意描述

离散化在许多题目中可以简化空间的分配方式,降低编程复杂度。现在你得到了一个数组 a[],你需要将其离散化得到数组 b[],满足对于任意 i,j:

  • 若 ai=aj,则 bi=bj;
  • 若 ai>aj,则 bi>bj。

除此之外,你还需要保证,如果存在 i 使得 bi=x>1,则存在 j 使得 bj=x−1。并且存在 k 满足 bk=1,对于任意 k 满足 bk≥1。

可以证明这样的离散方式是唯一的。

输入描述

第一行一个整数 n,表示数组长度。

第二行 n 个整数 ai,表示 a[] 数组。

输出描述

一行 n 个整数 bi,表示 b[] 数组。

样例输入 1

5
5 10 25 10 30

样例输出 1

1 2 3 2 4

数据范围

对于所有数据,1≤n≤105,0≤ai≤109。

子任务 1(30 分):ai 互不相同;
子任务 2(70 分):没有特殊限制。

猜你喜欢

转载自blog.csdn.net/zzxycdy/article/details/121315507