区間の和を求めるアルゴリズム(区間の更新なし)
要素数 N の数列 \(\{a_0, a_1, a_2, \cdots, a_{N-1}\}\) が与えられた時に、区間 = S + a; }}// - S;}int main() { vector<int>a = {1, 2 ...
E – Roadwork 解説(AtCoder Beginner Contest 128)
問題へのリンク
問題概要 N 回の通行止めがあり、 Q 人の人ははじめ座標 0 に立っている。
\(i\) 番目の道路工事は時刻&n ...
区間DP の考え方と使える状況まとめ
競技プログラミングで良く使われる動的計画法の1種、「区間DP」と呼ばれるものについてまとめました。
区間DPとは区間DPとは、区間を表す添え字を持つ動的計画法(DP)のことです。
基本的には、以下のような DP ...
E – Divisible Substring 解説(AtCoder Beginner Contest 158)
問題概要
\(2 \leq P \leq 10000\ ...
長さ N の数 S が与えられる。
素数 P で割り切れるような区間の選び方は何通りあるか?
\(2 \leq P \leq 10000\ ...
競プロでよく出る区間和問題の解き方まとめ
区間の更新がない場合
クエリ:\(O(1)\)
区間の更新が生じない場合は、累積和を用いることで高速にクエリを処理できます。
一次元の区間和累積和を用いることで、
前処理:\(O(N)\)クエリ:\(O(1)\)
で処理がで ...
Binary Indexed Tree (BIT) 総まとめ!区間加算や二次元BITまで
Binary Indexed Tree (またはフェニック木) は 数列 \(a_1, a_2, a_3, \cdots, a_n\) が与えられた時に、以下のようなことがそれぞれ \(O(log n)\) で実現できるデータ構造のこ ...
[AtCoder]ABC157 E – Simple String Queries (500点)
問題概要
S の \(i_q\) 番目から \(r_q\) 番目ま ...
長さ N の英小文字からなる文字列 S を与えられ、以下の二種類のクエリ合計 Q 個を処理する。
S の \(i_q\) 番目を \(c_q\) に変更するS の \(i_q\) 番目から \(r_q\) 番目ま ...
セグメント木を徹底解説!0から遅延評価やモノイドまで
セグメント木とは
セグメント木とは、完全二分木(全ての葉の深さが等しい木)によって実装された、区間を扱うのに適したデータ構造のことです。
区間に対する操作を対数時間 O(log n) で行えることが特徴で、競技プログラミング ...