用c++写 一个排列,求出了 a 数组,其中 ai 表示第 i个数左边有多少个数比它小。 计算出原来的排列。 输入 第一行输入 n 接下来 n - 1 个整数 ai,下标从 2开始。 1<=n<=100000 输出 输出 n 个整数表示原排列。
时间: 2024-05-13 14:13:47 浏览: 41
第十五届蓝桥杯大赛软件赛省赛第二场C/C++ 大学A B C组试题
没问题,这是一个典型的线性时间复杂度排序算法,可以使用计数排序或归并排序完成。
以下是计数排序的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, count[100001] = {0};
scanf("%d", &n);
for (i = 2; i <= n; i++) {
int a;
scanf("%d", &a);
count[i] = count[i - 1] + a;
}
int *a = (int *) malloc(sizeof(int) * n);
for (i = 1; i <= n; i++) {
a[count[i]] = i;
count[i]++;
}
for (i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
```
这段代码可以读入 n 和 ai,然后使用计数排序算法求出原排列,并输出结果。
接下来,您有其他问题需要回答吗?
阅读全文