#344. [R55D]卡牌游戏

[R55D]卡牌游戏

时空限制

2S/512M

题目描述

你正在玩一种单人扑克牌消除游戏。你手头上有一叠共 nn 张扑克牌,从上到下第 ii 张牌上写着一个数字 aia_i。同时,游戏设定了一个消除数字 kk

游戏从第 11 回合进行到第 nn 回合。在第 ii 回合,你会从这叠牌的顶端抽出一张牌(即数字为 aia_i 的牌),并根据以下规则进行操作:

  1. 放置:检查当前桌面上摆放的牌中,是否已经有数字为 aia_i 的牌。如果没有,你就把手里刚抽出的这张牌(带着它的原始初始序号 ii)摆放到桌面所有牌的最右侧。
  2. 消除:如果当前桌面上已经存在数字为 aia_i 的牌,那么手里刚抽出的这张牌将作为“触发器”直接丢弃,不放入桌面,并且立即触发一次消除操作: 在桌面上找到那张数字相同的牌,从它的位置开始,向右边(即最新放置的牌的方向)连续拿走 kk 张牌。如果从这张牌算起,它及它右边的牌总数不足 kk 张,就把它们全部拿走。拿走之后,桌面上如果右侧还有剩余的牌,它们会向左平移靠拢,填补空缺,保持原本的先后顺序。

请你计算并输出:原牌堆里的这 nn 张牌,分别是在哪一个回合(即因为抽取第几张牌触发了消除)被拿走消除的?

注:如果某张牌仅仅作为“触发器”被直接丢弃而未曾摆上桌面或没被消除,对应输出 0

格式

输入格式

第一行包含两个整数 nnkk,分别表示牌的总数和每次触发消除操作时最多拿走的牌数。 第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,表示这叠牌从上到下的数字序列。

输出格式

输出一行 nn 个整数,以空格隔开。其中第 jj 个整数表示原本牌堆中的第 jj 张牌被消除的回合数(即触发它被拿走时的回合 ii)。若未被消除,则输出 0

样例

样例输入 #1

5 2
3 1 2 1 4

样例输出 #1

0 4 4 0 0

样例输入 #2

7 3
1 2 3 2 3 7 1

样例输出 #2

7 4 4 0 7 7 0

数据规模

注意:你只有通过了子任务的所有测试点,才能获得对应子任务的分数。

子任务编号 分数 n,kn, k \le 特殊性质
11 4040 20002000
22 4040 5×1055 \times 10^5 k=nk = n
33 2020

对于 100%100\% 的数据,1kn5×1051 \leq k \leq n \leq 5 \times 10^51ai5×1051 \leq a_i \leq 5 \times 10^5