4078: 找到第K+1大的数

内存限制:1024 MB 时间限制:2.000 S
评测方式:文本比较 命题人:
提交:1 解决:1

题目描述

## 题目描述 给定一个长度为 $N$ 的序列$ A = (A_1, A_2, \ldots, A_N)$。 对于每个 $K = 0, 1, 2, \ldots, N-1$,求解以下问题: 找出满足以下条件的 $1$ 到 $N$ 之间(含 $1$ 和 $N$)的整数 $i$ 的数量: $A$ 中恰好包含 $K$ 个不同的大于 $A_i$ 的整数。

输入

## 输入格式 输入从标准输入按以下格式给出: $N$ $A_1 \ A_2 \ldots A_N$

输出

## 输出格式 输出 $N$ 行。 对于 $i = 1, 2, \ldots, N$,第$ i$ 行应包含 $K = i-1$ 时的答案。

样例输入 复制

6
2 7 1 8 2 8

样例输出 复制

2
1
2
1
0
0

提示

## 输入输出样例 ### 输入样例1 ``` 6 2 7 1 8 2 8 ``` ### 输出样例1 ``` 2 1 2 1 0 0 ``` ### 输入样例2 ``` 1 1 ``` ### 输出样例2 ``` 1 ``` ### 输入样例3 ``` 10 979861204 57882493 979861204 447672230 644706927 710511029 763027379 710511029 447672230 136397527 ``` ### 输出样例3 ``` 2 1 2 1 2 1 1 0 0 0 ``` ## 数据范围与提示 【样例说明1】 例如,我们将求出 $K=2$ 时的答案。 关于 $A_1 = 2,A$ 中包含 $2$ 个不同的大于 $A_1$ 的整数:$7$ 和 $8$。 关于 $A_2 = 7,A $中包含 $1 $个不同的大于 $A_2$ 的整数:$8$。 关于 $A_3 = 1,A $中包含 $3$ 个不同的大于 $A_3$ 的整数:$2、7$ 和 $8$。 关于 $A_4 = 8,A $中包含 $0$ 个不同的大于 $A_4$ 的整数(没有这样的整数)。 关于 $A_5 = 2,A $中包含 $2$ 个不同的大于 $A_5$ 的整数:$7$ 和 $8$。 关于 $A_6 = 8,A $中包含 $0$ 个不同的大于 $A_6$ 的整数(没有这样的整数)。 因此,有两个$ i$,即 $i=1$ 和 $i=5$,使得 $A$ 中恰好包含 $K=2$ 个不同的大于 $A_i$ 的整数。因此,$K=2$ 时的答案是 $2$。 【数据范围】 - $1 \leq N \leq 2 \times 10^5$ - $1 \leq A_i \leq 10^9$ - 输入中的所有值都是整数 ## 题目来源 ABC273C ## 题目背景 K+1)-th Largest Number指的是在一个给定的数组中找到第K+1大的数。也就是说,如果按非递减顺序对数组进行排序,那么第K+1大的数是什么。 举个例子,如果数组是 [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5],那么该数组中第4大的数是4。 通常情况下,可以使用一些排序算法,比如快速排序或堆排序,来找到第K+1大的数。另外,也可以使用一些选择算法,比如快速选择算法(Quickselect algorithm),来高效地找到第K+1大的数。