atcoder#ABC260D. [ABC260D] Draw Your Cards
[ABC260D] Draw Your Cards
题目描述
から が書かれた 枚のカードが裏向きで積まれた山札があり、上から 枚目のカードには整数 が書かれています。
この山札を使って、以下の行動を ターン繰り返します。
- 山札の一番上のカードを引いて、そこに書かれた整数を とする。
- 場に見えている表向きのカードであって書かれた整数が 以上であるもののうち、書かれた整数が最小のものの上に、引いたカードを表向きで重ねる。もし場にそのようなカードがなければ、引いたカードをどれにも重ねずに表向きで場に置く。
- その後、表向きのカードが 枚重ねられた山が場にあればその山のカードを全て食べる。食べられたカードは全て場から消滅する。
各カードについて、何ターン目に食べられるか、あるいは最後まで食べられないかを求めてください。
输入格式
入力は以下の形式で標準入力から与えられる。
输出格式
行出力せよ。
そのうち () 行目には、整数 が書かれたカードについて、以下のように出力せよ。
- もし が書かれたカードが食べられるなら、それが何ターン目であるかを整数として出力せよ。
- そうでないなら と出力せよ。
题目大意
依次摸 张卡片,第 个卡片上写的 , 是 到 的一个排列。
维护一些牌堆,如果 大于所有堆顶的牌,那么新开一堆只有 。
否则在所有堆顶的牌,找到大于 最小的一张,把 放到这个堆的堆顶。
如果这一堆有恰好 张牌,把这 个牌的数字都标记上当前的时间 ,并把这堆删掉。
最后输出每个数字被标记的时间,如果没有被标记过就是 。
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
提示
制約
- 入力は全て整数
- は の順列 ( を並べ替えて得られる列 ) である
Sample Explanation 1
この入力では、 です。 - ターン目に、 が書かれたカードが他のカードに重ねられずに表向きで場に置かれます。 - ターン目に、 が書かれたカードが他のカードに重ねられずに表向きで場に置かれます。 - ターン目に、 が書かれたカードが が書かれたカードの上に表向きで重ねられます。 - この時点で上から が書かれたカードが表向きで重ねられた山が 枚に達したので、両カードは食べられます。 - ターン目に、 が書かれたカードが が書かれたカードの上に表向きで重ねられます。 - この時点で上から が書かれたカードが表向きで重ねられた山が 枚に達したので、両カードは食べられます。 - ターン目に、 が書かれたカードが他のカードに重ねられずに表向きで場に置かれます。 - が書かれたカードは、最後まで食べられませんでした。
Sample Explanation 2
である場合、全てのカードは場に置かれたターンに食べられます。