100
#LS1031. 【入门】排序后输出位置

【入门】排序后输出位置

题目描述

输入 nn 个数,将其从小到大排列。并输出排序之后的数,在原数组中的位置

数据保证这个 nn 个数两两不同

  • 比如数组 a 是 [6, 8, 10, 7, 9]
  • 从小到大排序完后是 [6, 7, 8, 9, 10]
  • 最后输出 1 4 2 5 3
  • 因为 (a[1]=6) < (a[4]=7) < (a[2]=8) < (a[5]=9) < (a[3]=10)
  • 请使用 sort 的自定义排序完成此题

输入格式

第一行一个整数 nn,表示数的个数

第二行有 nn 个整数,中间用一空格隔开。

输出格式

一行 nn 个整数,每两个数之间用一空格隔开,输出排序后的数在原数组中的位置

5
6 8 10 7 9
1 4 2 5 3

提示

  • 自定义排序的语法
// 原数组 a
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];

// 数组 b 存储 a 的下标
vector<int> b(n);
for (int i = 0; i < n; i++) b[i] = i;

sort(b.begin(), b.end(), [&](const int& x, const int& y) {
    // x 可以排在 y 前面返回 true, 否则返回 false
    // x, y 都是数组 a 中的下标
    // 那 下标x 什么时候应该排在 下标y 前面呢?
});
for (int i = 0; i < n; i++) cout << b[i] + 1 << ' ';

数据规模与限制

  • 5n105,1a[i]1095 \le n \le 10^5, 1 \le a[i] \le 10^9
  • 1s, 1024KiB for each test case.