実際には、データ構造。
私はフェンウィックツリー、だけでなく、最初の場所を押した数日間のテンプレートにカイプッシュ......
図ブルーブックに対して見数日間読み取り、別の名前は、バイナリツリーインデックスツリーのアレイであり、それはツリーデータ構造によって得られる効果を意味変形抽象ツリー順の配列です。いくつかはフェンウィックツリーはセクションが加速を改訂サポートしてはならない、去勢のツリーラインバージョンは、私にはわからないと言います。
我々はlowbitの概念を理解する必要がまず、それはビットの最小の数ことを示している1のバイナリ値に回転数を指します。これは、特殊文字を持っていますが、なぜこのプロパティは、彼らが知らないことを証明する必要はありませんしています。
その後、我々は図を描く、一定の範囲内に上から下に層ごとに分散サイズlowbitに応じて、数層でソート。バイナリツリーを見つけるのは難しいことではありません。水平に我々は、追加のノードまたは他の長及び間隔の点のすべての性質は、それがカバーするものを表しているなど、各ノードlowbit(その)-1ストリップ長さを、聞かせて拡張(参照してくださいブルーブック)。
図にもつれを有し、そして我々は、特別な自然lowbitの数は、このセクションおよび第一セクション(右端)の前にを含まないようにマイナスそのlowbitの範囲等しい見出さ部ありません。プラスセクションの数は、セクションの間隔と最小のlowbit同数(左端)を含みます。それ形而上学、右。
我々はlowbitとその性質の概念は、その後、需要がそれをどのようにlowbitことを知っていますか?:私たちは、一例として、100に負の否定プラス1の数に等しい数を取っているコンピュータの補数、ということを知っています
01100100(100)
10011011(-99)//は、-101または-99のですか?
10011100(-100)
00000100(-100とビット単位100と)
だから、\(lowbit(X-)X-&= -x \) 。もっと形而上学右。
間隔と、一緒にケースの非ゼロ数の電流範囲の電流範囲の結果を照会するために、範囲(マイナスlowbit)が上がります。これは、出発点と接頭辞としてXを得ることができます。
シングルポイントの現在のセクション番号に変更された値が現在の時間間隔がnに等しい未満であること。ように改変
......各要素の前処理として、動作を変更するn回は十分に加えます。理事会は、ここに掲載しました。
int lowbit(int x){
return x&-x;
}
int sum(int x){
int res=0;
while(x){
res+=c[x];
x-=lowbit(x);
}
return res;
}
void add(int x,int d){
while(x<=n){
c[x]+=d;
x+=lowbit(x);
}
}