[第二回日本最強プログラマー学生選手権] F - Max Matrix を間違えた

[Q] F. Max Matrix

・考察
行列があって、行にあるすべての値を最大値に変えていくのか、と勘違い。正しくは、掛け算九九表の値を毎回変えて、行と列のmaxをとる、ということ。

こういうこと。
  10 0
0
0

  10 0
20
 0

   10 0
20
 5

   30 0
20
 5

これではない。
10  0
10  0

20 20
10
...

・まちがった実装。これはこれで問題としてありそう。
https://atcoder.jp/contests/jsc2021/submissions/50503885

・正しいの
https://atcoder.jp/contests/jsc2021/submissions/50514087

実装は、
1. BITを使いたい。rowとcolでそれぞれ値の総和を知りたい
2. でも Y >= 1e8 ででかすぎ
3. じゃあ座標圧縮して2e5通りの値にすればいい。ちなみに0も追加で入れておく
4. そうすると、値のほかにカウント数もBITで知りたい
5. Yの値の座標圧縮と、4つのBITを使えばよかろうなのだ
6. 行の更新を考える場合、更新前の値をいったん全部引いて、新しい行の値を足せばいい。都度、列にどれだけ最大値になるものがあるかは見る。


この記事が気に入ったらサポートをしてみませんか?