EOJ When I Sort…
In datastruct class, the teacher gives partychen a simple sort question:A permutation
p
[
0
]
p[0]
p[0],
p
[
1
]
p[1]
p[1], …,
p
[
n
−
1
]
p[n-1]
p[n−1] is a sequence containing each number from
0
0
0 to
n
−
1
n-1
n−1 exactly once. The result of applying permutation
p
p
p to an array
A
A
A of length
n
n
n is an array
B
B
B of length
n
n
n, where
B
[
p
[
i
]
]
=
A
[
i
]
B[p[i]] = A[i]
B[p[i]]=A[i] (0-based indices).
Given an array
A
A
A, find a permutation which has the effect of sorting the elements of
A
A
A in non-descending order, i.e., an order where each element is greater than or equal to the previous one. If there are several suitable permutations output the lexicographically smallest one.
The permutation
p
[
0
]
p[0]
p[0],
p
[
1
]
p[1]
p[1], …,
p
[
n
−
1
]
p[n-1]
p[n−1] is considered lexicographically smaller than the permutation
q
[
0
]
q[0]
q[0],
q
[
1
]
q[1]
q[1], …,
q
[
n
−
1
]
q[n-1]
q[n−1] if there is an index
i
i
i such that
p
[
i
]
<
q
[
i
]
p[i] <q[i]
p[i]<q[i] and the equation
p
[
j
]
=
q
[
j
]
p[j] = q[j]
p[j]=q[j] holds for all
j
<
i
j<i
j<i.
输入格式
The first line of input gives the number of cases,
N
N
N(
1
≤
N
≤
100
1 \leq N \leq 100
1≤N≤100).
N
N
N test cases follow.
In each test case, there are two lines. The first line is a interger
M
M
M(
1
≤
M
≤
10000
1 \leq M \leq 10000
1≤M≤10000), representing the numbers of array
A
A
A, and in the second line there are
M
M
M intergers.
输出格式
Output the permutation
p
p
p as discrible above.
样例输入
2
3
2 3 1
4
2 1 3 1
输出:
1 2 0
2 0 3 1
#include <iostream>
#include <string.h>
#include <math.h>
#include <map>
#include <vector>
#include <sstream>
#include <algorithm>
#include <iomanip>
using namespace std;
struct t {
int index;
int num;
}a[10005];
int cmp(t aa, t bb)
{
if (aa.num == bb.num)
return aa.index < bb.index;
return aa.num < bb.num;
}
int main()
{
int n;
cin >> n;
int arr[10005] = { 0 };
while (n--)
{
int m; cin >> m;
for (int i = 0; i < m; i++)
{
cin >> a[i].num;
arr[i] = a[i].num;
a[i].index = i;
}
sort(a, a + m, cmp);
for (int i = 0; i < m; i++)
{
for (int j = 0; j < m; j++)
{
if (arr[i] == a[j].num && i == a[j].index)
cout << j << ' ';
}
}
cout << endl;
}
}