数値{x0、x1、...、xn}ならセットを含むDSを実装したいと思います。以下に述べるニーズを満たすために使用できるデータ構造はどれですか?
初期化(n)は - 番号X0 = X1 = ... = XN = 0 O(N)最悪のケースを設定します。
Get(i) - xiの値を返します。 O(ログn)最悪の場合。
加算(d、i、j) - すべての数にxi、...、xjの値を加算します(i < = jと仮定)。 O(ログn)最悪の場合。
これらのDSを前述の時間の複雑さでどのように実装することができますか?ありがとうございました。
それほど多くは真実ではない、と私は思わない。範囲に適用される値を表すデータ型を簡単に作成し、メモリ内の実際の数値ではなく、これらの値の範囲のリストとして値を表すことができます。そこから 'O(1)'に 'Add(d、i、j)'を実装するのは簡単です。しかし、このアプローチでは 'get(i)'を素早く行うことはできません。この問題は、O(log(n))の取得と追加の両方を行っているようです。 – Mshnik
"O(1)でAdd(d、i、j)を実装するのは簡単です。"次に、最初のものと重複する別の範囲に追加したい場合は、さらに何回ですか? –