IX = XI = X
であるような行列 I を単位行列と呼ぶはずだけど、I がたぶん Identity の頭文字。英語では習わなかったけども。ということは、id の名前で返すべきは何の作用ももたらさない操作なのかなと。e と id の区別が難しかったんだよね。最大値を求める操作に対しての負の無限大、最小値を求める操作に対しての正の無限大、数を数える操作に対してのゼロみたいな、初期値としての e とは別に用意される id という「値」はなんだろう、というのが疑問だった。物理的な形式はともかくとして概念としての id は操作ですよね? ということを納得すると、自分の実装で Op#nop?
の名前を与えられている機能は Op#id?
が相応しかったんじゃないかなあと思ったり。■コンテスト中の提出 #68152111 (AC / 1796 Byte / 2984 ms) と冒頭にコメントを付加しただけの提出 #68173358 (AC / 2433 Byte / 2596 ms)。ジャッジサーバーが使い回しではなく新規立ち上げだから1ケース目だけ 100 ms 余計にかかってる、みたいな話ではなく、全体的に1割程度の時間差がついている。再提出で 100 ms も差がつくことはないだろうと思っていたから意外に大きな差に驚いている。こんなんではコンテスト中に TLE だったものが終了後の再提出では AC になった、みたいなことが十分に起こりうる。特に遅延セグメント木と3乗の DP が解法となる問題ではシビアな定数倍低減が AC と TLE を分けるのでしゃれにならないよ。■■■@2025-08-07 精進。D 問題。提出 #68259724 (AC / 471 Byte / 1172 ms)。コメントに書いたけど「ひとたびテンションが 0..1000 の範囲に入ったら抜け出せない」ことが見抜けるかどうか。見抜けたらその範囲で DP をする。自分は見抜けなかったので 0..500 の範囲+それ以上という括りでクエリ全体を一括シミュレートしてサンプルしか通らなかった (TLE×27/AC×3)。さらにもうひとつどこ以降の DP 結果を参照するかを決めるのに二分探索をする必要もあったらしい。すべてのネタバレ後に実装をした。実装だけなら D 問題だったけど考察ポイントが2つもあると問題を総合的に理解していないと解けない。断片的な手がかりからあれかなこれかなというアプローチでは解けない。「
クエリの大きさははったりだなと思ったけど、クエリの数もそうなんかな」と先に書いていた。大きすぎるクエリには二分探索で対応する。(シミュレートするには)多すぎるクエリは 1001 種類の入力にだけ対応した DP で予め答えを出しておく。それでいいそれでできるという判断に必要だったのが「ひとたびテンションが 0..1000 の範囲に入ったら抜け出せない」という洞察。ありませんでした。