-2

範囲更新を行うときに、バイナリインデックスツリーで理解するのを手伝ってくれる人がいますか-すべての要素を更新しないのはなぜですか?開始要素と終了要素のみを更新するのはなぜですか?

たとえば 0

arr[x] の BIT の配列要素範囲を arr[y] に更新する必要があります。バイナリ インデックス ツリー ポイント更新関数に従って、インデックス x の累積頻度と、更新によって影響を受ける x よりも大きいすべてのインデックスを更新します。 .


しかし、範囲の更新にポイント更新関数を使用している場合は、ポイント更新関数を使用して x よりも大きく y よりも小さいすべてのインデックスを更新しない理由よりも。範囲更新はすべての要素を値で更新する必要があることを意味するため、開始インデックスと終了インデックスの上の 1 つを更新するとすべての更新がどのようにカバーされるか

なぜ私たちはしていないのですか

...................................................................

 for (i =[x] to [y])
    pointupdate(ar[i],val);// why we are not doing this 

update(p, v): //point update
  for (; p <= N; p += p&(-p))
    ft[p] += v   

# Add v to A[a...b] 
update(a, b, v):     // why we are using this only for update of one element how other elements greater than a will be coverd
  update(a, v)     
  update(b + 1, -v)     

4

1 に答える 1