atcoder#ABC260D. [ABC260D] Draw Your Cards

[ABC260D] Draw Your Cards

题目描述

1 1 から N N が書かれた N N 枚のカードが裏向きで積まれた山札があり、上から i i 枚目のカードには整数 Pi P_i が書かれています。

この山札を使って、以下の行動を N N ターン繰り返します。

  • 山札の一番上のカードを引いて、そこに書かれた整数を X X とする。
  • 場に見えている表向きのカードであって書かれた整数が X X 以上であるもののうち、書かれた整数が最小のものの上に、引いたカードを表向きで重ねる。もし場にそのようなカードがなければ、引いたカードをどれにも重ねずに表向きで場に置く。
  • その後、表向きのカードが K K 枚重ねられた山が場にあればその山のカードを全て食べる。食べられたカードは全て場から消滅する。

各カードについて、何ターン目に食べられるか、あるいは最後まで食べられないかを求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N K K P1 P_1 P2 P_2 \dots PN P_N

输出格式

N N 行出力せよ。
そのうち i i (1  i  N 1\ \le\ i\ \le\ N ) 行目には、整数 i i が書かれたカードについて、以下のように出力せよ。

  • もし i i が書かれたカードが食べられるなら、それが何ターン目であるかを整数として出力せよ。
  • そうでないなら 1 -1 と出力せよ。

题目大意

依次摸 nn 张卡片,第 ii 个卡片上写的 pip_ipip_i11nn 的一个排列。

维护一些牌堆,如果 pip_i 大于所有堆顶的牌,那么新开一堆只有 pip_i

否则在所有堆顶的牌,找到大于 pip_i 最小的一张,把 pip_i 放到这个堆的堆顶。

如果这一堆有恰好 KK 张牌,把这 KK 个牌的数字都标记上当前的时间 ii,并把这堆删掉。

最后输出每个数字被标记的时间,如果没有被标记过就是 1-1

Translated by @_YXJS_\tt{\_YXJS\_}.

5 2
3 5 2 1 4
4
3
3
-1
4
5 1
1 2 3 4 5
1
2
3
4
5
15 3
3 14 15 9 2 6 5 13 1 7 10 11 8 12 4
9
9
9
15
15
6
-1
-1
6
-1
-1
-1
-1
6
15

提示

制約

  • 入力は全て整数
  • 1  K  N  2 × 105 1\ \le\ K\ \le\ N\ \le\ 2\ \times\ 10^5
  • P P (1,2,,N) (1,2,\dots,N) の順列 ( (1,2,,N) (1,2,\dots,N) を並べ替えて得られる列 ) である

Sample Explanation 1

この入力では、 P=(3,5,2,1,4),K=2 P=(3,5,2,1,4),K=2 です。 - 1 1 ターン目に、 3 3 が書かれたカードが他のカードに重ねられずに表向きで場に置かれます。 - 2 2 ターン目に、 5 5 が書かれたカードが他のカードに重ねられずに表向きで場に置かれます。 - 3 3 ターン目に、 2 2 が書かれたカードが 3 3 が書かれたカードの上に表向きで重ねられます。 - この時点で上から 2,3 2,3 が書かれたカードが表向きで重ねられた山が K=2 K=2 枚に達したので、両カードは食べられます。 - 4 4 ターン目に、 1 1 が書かれたカードが 5 5 が書かれたカードの上に表向きで重ねられます。 - この時点で上から 1,5 1,5 が書かれたカードが表向きで重ねられた山が K=2 K=2 枚に達したので、両カードは食べられます。 - 5 5 ターン目に、 4 4 が書かれたカードが他のカードに重ねられずに表向きで場に置かれます。 - 4 4 が書かれたカードは、最後まで食べられませんでした。

Sample Explanation 2

K=1 K=1 である場合、全てのカードは場に置かれたターンに食べられます。