けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

データ構造

AtCoder ABC 357 F - Two Sequence Queries (2D, 青色, 550 点)

maspy さんの次のツイートがすべて!! F(cnt,sum) という組と定数加算作用が遅延セグ木にのるというのはよく知られていると思いますが、これは要素に対する (0乗和, 1乗和) と解釈できて、組 (0,1,...,k 乗和) などに一般化できます。今回は要素 (x,y) に対…

鉄則本 B08 - Counting Points (2Q, ★4)

二次元累積和の練習問題! 問題へのリンク 問題概要 二次元平面上に 個の点がある。 番目の点の座標は である。 「x 座標が 以上 以下で、y 座標が 以上 以下であるような点は何個あるか?」 というタイプの 回のクエリに答えよ。 制約 解法 x, y 座標の値が…

鉄則本 A06 - How Many Guests? (4Q, ★2)

累積和に関する問題!! 問題へのリンク 問題概要 日間にわたるイベントを開催し、日 には 人が来場した。次の 回のクエリに答えよ。 【クエリ】 各クエリでは が与えられるので、 日目から 日目までの間に合計何人が来場したかを答えよ。 制約 解法 累積和…

AtCoder ABC 085 B - Kagami Mochi (6Q, 灰色, 200 点)

古き良き、ABS にも収録した問題! 問題へのリンク 問題概要 個の整数 が与えられる。 これらの整数の中に、相異なる整数は何種類あるかを求めよ。 制約 解法 最も簡単な方法は、集合型 set 型を用いる方法だと思われる。set は 要素の挿入 (集合に要素 を挿…

Yosupo Library Checker - Dueue Operate All Composite (2D)

SWAG を履修した! 問題へのリンク 問題概要 一次関数の列を考える。初期状態では空である。以下の 個のクエリを処理せよ。 クエリタイプ 1 ():一次関数 を列の先頭に挿入する クエリタイプ 2 ():一次関数 を列の末尾に挿入する クエリタイプ 3:列の先頭…

Yosupo Library Checker - Queue Operate All Composite (2D)

SWAG を履修した! 問題へのリンク 問題概要 一次関数の列を考える。初期状態では空である。以下の 個のクエリを処理せよ。 クエリタイプ 1 ():一次関数 を列の末尾に挿入する クエリタイプ 2:列の先頭の要素を削除する クエリタイプ 3 ():列を としたと…

AtCoder ABC 350 B - Dentist Aoki (6Q, 灰色, 200 点)

「集計処理」の基本問題! 問題へのリンク 問題概要 (意訳) 個の LED が最初はすべて光っている。 回の処理を行う。 回目の処理では 番目の LED の状態を flip する (光っていたら消して、消えていたら光らせる)。 最終的に何個の LED が光っているかを求め…

AtCoder ABC 350 G - Mediator (3D, 黄色, 600 点)

本当に色んな解法がある問題っぽい!! 問題へのリンク 問題概要 頂点 の 頂点からなる無向グラフがあり、最初は辺がない。以下の 2 種類のオンラインクエリに答えよ。 クエリタイプ 1:頂点 間に辺を結ぶ クエリタイプ 2:頂点 の双方に隣接する頂点がある…

AtCoder ARC 167 D - Good Permutation (黄色, 700 点)

モノグサでバチャやって、なんとか通した! 問題へのリンク 問題概要 の順列 が与えられる。この順列に対して「2 個の要素を選んで swap する」という操作を実行して、 「順列から誘導される Functional Graph の連結成分の個数が 1 個」 という状態を実現し…

Yosupo Library Checker - Range Affine Range Sum (2D)

これ実は ACL Practice Contest の K 問題と同じらしい atcoder.jp 問題へのリンク 問題概要 長さ の数列 が与えられる。この数列に対して、次の 回のクエリに答えよ。 クエリタイプ 1 ():数列の区間 内の各要素の値を 倍して を足せ クエリタイプ 2 ():数…

AOJ 1282 Bug Hunt (ICPC アジア 2007 H) (450 点)

アドホックに構文解析した。カッコ列の問題とみなして、stack で処理した。 問題へのリンク 問題概要 次のような「配列を宣言したり配列に値を代入したりする処理を表すプログラム」が与えられる。 a[2147483647] a[0]=1 B[2] B[a[0]]=2 a[B[a[0]]]=3 a[2147…

Yosupo Library Checker - Static Range Frequency

Wavelet Matrix の機能の verify 第二弾!!! 問題へのリンク 問題概要 サイズ の数列 が与えられる。次の 個のクエリに答えよ。 区間 において値 が出現する回数を答えよ。 制約 考えたこと これも Wavelet Matrix の典型機能である。rank() という関数が…

Yosupo Library Checker - Range Kth Smallest

数列の区間について、 番目に小さい値を求めていく。Wavelet Matrix で処理できる典型クエリ! 問題へのリンク 問題概要 サイズ の数列 が与えられる。次の 個のクエリに答えよ。 区間 において 番目 (0-indexed) に小さい数を答えよ 制約 考えたこと Wavele…

Cartesian Tree の実装 〜 stack を用いた O(N) 時間構築

Cartesian Tree を実装しよう! 具体的には、Yosupo Library Checker の問題「Cartesian Tree」を通すことにする。 問題概要 長さ の数列 (互いに異なる) から誘導される Cartesian Tree を求めて出力せよ。 具体的には Cartesian Tree の各頂点について、そ…

AOJ 1549 Hard Beans (ACPC 2014 day2-I)

Wavelet Matrix の prev_value や next_value が使える問題! 問題へのリンク 問題概要 サイズ の数列 が与えられる。次の 個のクエリに答えよ。 が与えられるので、数列の区間 の値のうち、 との差の最小値を答えよ。 制約 考えたこと Wavelet Matrix の関…

AtCoder ABC 324 G - Generate Arrays (橙色, 600 点)

Wavelet Matrix の練習に 問題へのリンク 問題概要 初期状態が の順列である数列 が与えられる。 次の 2 種類のクエリに答えよ。なお、 番目 () のクエリをこなした後には、数列は 個に分割された状態となる。 クエリタイプ 1:群数列の 番目について、先頭…

AtCoder ABC 234 D - Prefix K-th Max (茶色, 400 点)

あまりにも色んな解法がある問題 問題へのリンク 問題概要 の順列 と正の整数 が与えられる。 各 に対して、順列の先頭から 個の値の中での 番目に大きい値を求めよ。 制約 考えたこと 次の問題の下位互換と言える。 drken1215.hatenablog.com この上位互換…

AOJ Course RSQ and RUQ (遅延評価セグメント木の練習問題 4)

「区間値更新」と「区間和取得」の遅延評価セグ木。 問題へのリンク 問題概要 数列 に対して、次の 2 種類のクエリを 個処理せよ。なお、数列は最初は 0 に初期化されているとする。 クエリタイプ (0 s t x): を に変更する クエリタイプ (1 s t): の総和…

AOJ Course RSQ and RAQ (遅延評価セグメント木の練習問題 3)

「区間加算」と「区間和取得」の遅延評価セグ木。 問題へのリンク 問題概要 数列 に対して、次の 2 種類のクエリを 個処理せよ。なお、数列は最初は 0 に初期化されているとする。 クエリタイプ (0 s t x): に を加算する クエリタイプ (1 s t): の総和を…

AOJ Course RMQ and RUQ (遅延評価セグメント木の練習問題 2)

Starry Sky Tree は「区間 加算」「区間最小値取得」を処理する遅延セグ木だった。 今回は「区間 更新」「区間最小値取得」を処理する遅延セグ木を実装する。 問題へのリンク 問題概要 数列 に対して、次の 2 種類のクエリを 個処理せよ。なお、数列は最初は…

AOJ Course RMQ and RAQ (遅延評価セグメント木の練習問題 1)

この問題は、人生で最初に挑む遅延セグ木の問題としてオススメ!Starry Sky Tree と呼ばれるものでもある。 問題へのリンク 問題概要 数列 に対して、次の 2 種類のクエリを 個処理せよ。なお、数列は最初は 0 に初期化されているとする。 クエリタイプ (0 s…

Union-Find の中身のグループ分けを知る関数 groups() を実装する!

多くの競プロerにとって、標準ライブラリ以外で自分の手で初めて実装するデータ構造は Union-Find でしょう。 自分でデータ構造を実装するとき、その中身がどうなっているかをきちんと把握できないと不安を感じてしまうこともあるでしょう。そこで本記事では…

鉄則本 A58 - RMQ (Range Maximum Queries) (1Q, ★5)

セグメント木の最初の練習問題によさそうな問題 問題へのリンク 問題概要 長さ の数列 がある。最初はすべての要素が 0 となっている。この数列に対して、以下の 2 種類のクエリに答えよ ( 個のクエリが与えられる)。 クエリ 1: が与えられるので、 の値を …

AOJ 2369 CatChecker (JAG 冬合宿 2010 day3-A) (300 点)

カッコ列の整合性判定問題の亜種と言える。 問題へのリンク 問題概要 文字列 が cat 文字列であるとは、次の条件を満たすことをいう。 は空文字列である ある cat 文字列 が存在して、 と表せる 与えられた文字列 が cat 文字列であるかどうかを判定せよ。 …

AtCoder ABC 302 Ex - Ball Collector (橙色, 625 点)

undo 付き Union-Find! 問題へのリンク 問題概要 頂点数 の木が与えられる。各頂点には、数値 の書かれたボールと、数値 の書かれたボールがある。 各 に対して、次の問に答えよ。 パス - 上の各頂点から ボールを 1 個ずつ選んだときの ボールに書かれた数…

AOJ 3333 Range Xor Query (HUPC 2023 day1-J)

Binary Trie + 平方分割 問題へのリンク editorials 問題概要 数列 に対して、以下の 個のクエリを処理せよ。 クエリタイプ 1 (k x): を xor に置き換える クエリタイプ 2 (l r x): xor の値を出力する 制約 考えたこと これは TL で解法を見た上で解いた…

AtCoder ABC 278 D - All Assign Point Add (茶色, 400 点)

データの持ち方をうまく工夫することで、計算量を改善する系の問題! 問題へのリンク 問題概要 長さ の数列 が与えられる。 個のクエリが与えられるので、それらを順に処理せよ。クエリは次の 3 種類ある。 x:数列 をすべて に書き換える i x: に を足す i…

AtCoder ABC 298 C - Cards Query Problem (茶色, 300 点)

クエリ形式の問題に慣れたり、クエリに答えるためのデータ構造を考えたりすることに慣れたりするための練習問題! 問題へのリンク 問題概要 1 から までの番号のついた 個の箱と、何も書かれていない無数のカードがある。今、 個のクエリが与えられるので、…

AtCoder ABC 282 F - Union of Two Sets (青色, 600 点)

コンテスト中、Sparse Table だと思わずに解いていた。コンテスト後に TL で Sparse Table だと見て、「確かに!」と思った。 問題へのリンク 問題概要 インタラクティブ問題である。次のフェーズ I とフェーズ II に分かれる。 フェーズ I ジャッジから整数…

AtCoder ABC 282 D - Make Bipartite 2 (緑色, 400 点)

一般にグラフの問題を解くときは「連結成分ごとに解けば良いのではないか」と考えるのが有効なことがある! その意識がしっかりしていれば、「グラフが非連結の場合に気づかなかった」という罠を回避できる!! 問題へのリンク 問題概要 頂点数 、辺数 の単…