ラベル Cartesian Tree の投稿を表示しています。 すべての投稿を表示
ラベル Cartesian Tree の投稿を表示しています。 すべての投稿を表示

2026年5月8日金曜日

Next DP Contest

 F以外の4点以下の問題は正解。後は部分点を拾った。もう少し取れないとまずい。

コンテスト後のツイート

F - 集合 

 解説AC。テーマ一覧とArcAkiさんの記事を参考にしてAC。

 そもそも考察が難しい。
 最小値を使うか使わないかで考えると、その左側のみ、その右側のみ、両方を使う、で場合分けされるが、両方使う場合は最小値も必ず使わなくてはいけない。このことから、再帰を使って書けそうだと分かる。
 ……という考察部分に全く気付けなかった。

 この考察通り、再帰で書こうとすると、Cartesian treeの順にやることになり、そこでは二乗の木DPを行うことになる、という流れ。

 テーマを見てしまっていたので、この考察が分かった後はすんなり書けたけれど、実際はその後の部分も簡単ではない気がする。

J - 個数と総和

 この問題と同じテーマというのを見てAC。
 「繰り上がりを持つ桁 DP」と呼ばれているのは知らなかった。

 類題をACしたときは理解していたのだろうけど、DPテーブルを使い回して解くという解法を忘れていた。結構汎用性がある解法のようなので、ちゃんと身に着けておきたい。


N - ナップサック

 この解説記事を見てAC。
 証明はよく分かってないが、「DP[j]を求めるのに、最大重量Bに対して、3*B*B/j個効率良いものを見れば良い」ということは押さえておく。




2025年8月28日木曜日

AtCoder Beginner Contest 420

 Fを除く六完。500位以内だったのでレート減少は止まったかと思ったのだが、-5だった。悲しい。

コンテスト後のツイート

F - kirinuki

 解説AC。

 といっても、解説の詳細は理解できず、Cartesian Treeを使うことと前計算を行うことを理解し、あとは自分で考えた。

 まず、最大長方形っぽいと思うところは良かったが、そこから、Cartesian Treeを使おうという発想に行かねばならなかった。すると、横の長さと縦の長さの範囲が決まったとき、その中にK以下の長方形は何個あるか? という問題に帰着できる。

 (横の長さ, 縦の長さ)が決まったとき、K以下の長方形が何個あるかは求められるので、それを前計算して累積和を取れば範囲に対しても対応できる。横の長さ*縦の長さに制約があるのがポイント。

 整理すれば一つ一つのステップはそんなに難しくないのだが、実際に解くのは大変な問題だった。

 とはいえ、一番重要なのは、最大長方形っぽいというところから、Cartesian Treeを使おうと発想する部分。ここは押さえておきたい。