概要 競プロでは知る人ぞ知るスライド最小値というテクニックは、より一般化されて sliding window aggregation という名前で知られています。本記事では両端で要素の追加/削除、全体での半群の和を得るというクエリを全て償却定数時間で処理するアルゴリズムの実装について説明します。 アルゴリズム 値と先頭からの累積和をペアにして要素として持つ stack を考えます。するとこの stack を2つ背中合わせにするように持てば、追加/削除は対応する stack に操作を行えばよく、累積和の更新も定数時間で実行可能です。また、総和を計算するクエリも左右の stack の累積和を単純に足せばよく、定数時間です。ここで問題となるのが、片方の stack から pop を多く呼び出すと空となり、それ以上 pop が出来なくなることにあります。ここで pop したいが対応する stack

