This commit is contained in:
1 parent
ac9df32e58
commit
2175f4f94c
2 files changed
+71
No files matched your search
@@ -0,0 +1,23 @@
|
|||||||
|
#include<bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
int t;
|
||||||
|
int n;
|
||||||
|
int a[100005];
|
||||||
|
int xl[100005];
|
||||||
|
int main() {
|
||||||
|
scanf("%d", &t);
|
||||||
|
while(t--) {
|
||||||
|
scanf("%d", &n);
|
||||||
|
for(int i = 1; i <= n; ++i) {
|
||||||
|
scanf("%d", &a[i]);
|
||||||
|
xl[i] = a[i];
|
||||||
|
}
|
||||||
|
sort(a + 1, a + n + 1);
|
||||||
|
int tot = unique(a + 1, a + n + 1) - a;
|
||||||
|
for(int i = 1; i <= n; ++i) {
|
||||||
|
int wher = lower_bound(a + 1, a + tot, xl[i]) - a;
|
||||||
|
printf("%d ",wher);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# B3694 【模板】数列离散化
|
||||||
|
|
||||||
|
## 题目描述
|
||||||
|
|
||||||
|
给定一个长度为 $n$ 的数列 $a$。定义 $\mathrm{rank}(i)$ 表示数列 $a$ 中比 $a_i$ 小的不同数字个数再加一。
|
||||||
|
|
||||||
|
对 $1 \leq i \leq n$,现在请你求出所有的 $\mathrm{rank}(i)$。
|
||||||
|
|
||||||
|
## 输入格式
|
||||||
|
|
||||||
|
**本题单测试点内有多组测试数据**。
|
||||||
|
|
||||||
|
输入的第一行是一个整数,表示数据组数 $T$。接下来依次给出每组数据的信息:
|
||||||
|
|
||||||
|
第一行是一个整数,表示数列长度 $n$。
|
||||||
|
第二行有 $n$ 个整数表示数列 $a$,第 $i$ 个整数表示 $a_i$。
|
||||||
|
|
||||||
|
## 输出格式
|
||||||
|
|
||||||
|
对每组数据,输出一行 $n$ 个整数,用空格隔开,依次表示 $\mathrm{rank}(1)$ 到 $\mathrm{rank}(n)$。
|
||||||
|
|
||||||
|
## 输入输出样例 #1
|
||||||
|
|
||||||
|
### 输入 #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 \leq T \leq 5$,$1 \leq n \leq 10^5$,$-10^9 \leq a_i \leq 10^9$。
|
||||||
Reference in new issue
Block a user