题目描述
给定一个长度为 𝑛 的数列 𝑎。定义 rank(𝑖) 表示数列 𝑎中比 𝑎𝑖小的不同数字个数再加一。
对 1≤𝑖≤𝑛,现在请你求出所有的 rank(𝑖)。
输入格式
本题单测试点内有多组测试数据。
输入的第一行是一个整数,表示数据组数 𝑇。接下来依次给出每组数据的信息:
第一行是一个整数,表示数列长度 𝑛。
第二行有 𝑛 个整数表示数列 𝑎,第 𝑖个整数表示 𝑎𝑖。
输出格式
对每组数据,输出一行 𝑛个整数,用空格隔开,依次表示 rank(1)到 rank(𝑛)。
输入输出样例
输入 #1复制
3 3 1 2 3 5 1 6 2 2 7 4 -1 -2 -3 -3
输出 #1复制
1 2 3 1 3 2 2 4 3 2 1 1
说明/提示
数据规模与约定
对全部的测试点,保证 1≤𝑇≤5,1≤𝑛≤105,−109≤𝑎𝑖≤109。
备注
105表示10的5次方,-109表示-10的9次方,109表示10的9次方。
AC代码
#include<bits/stdc++.h>
using namespace std;
void m(void){
map<int,int> s;
int n;
int c=1;
int a[100005];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
s[a[i]]=0;
}
for(auto it=s.begin();it!=s.end();it++){
(*it).second=c;
c++;
}
for(int j=0;j<n;j++){
printf("%d ",s[a[j]]);
}
printf("\n");
}
int main()
{
int t;
scanf("%d",&t);
for(int i=0;i<t;i++){
m();
}
return 0;
}