アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC442D - Swap and Range Sum

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略

考え方

高速に和を求めるといえば、とりあえず思い浮かぶのは累積和
通常なら累積和は中身の変更にO(N)かかるため、中身が固定のものにしか使えない。

しかし今回は隣接項を入れ替えるだけなので更新が1ヶ所で済む。
つまり、a.at(i)がxでa.at(i+1)がyだった場合、この2つの入れ替えではi番目までの和がy-x増えるだけである。
そのため、通常の累積和でO(N+Q)で非常に高速に解ける。

解答例


注意点


別解

Fenwick木※を用いる

Fenwick木※なら、「中身を自由に変更できる」「和を高速に出せる」が両立できるため、普通に解ける。
O((N+Q)*logN)に悪化するが、十分間に合う。
(解答例略)

タグ:

累積和
最近更新されたスレッド
ウィキ募集バナー