Luogu P3368 [テンプレート]フェンウィックツリー2

ゲート

間隔、問い合わせの単一の点を変更します。

違いによるメンテナンス。

そのクエリが返す(1、x)は、検索クエリが直接のXので。

修飾されたように、間隔は、追加の端を減算、すなわち(X、k)は、(Y、-k)を開始します

 

コードは以下の通りです

#include <cstdioを> 
する#include <iostreamの> 
する#include <cmath> 
の#include <CStringの>
 に#define MogeKo qwq
 使用して 名前空間をSTD。

const  int型 MAXN = 5E5 + 10 整数 N、M、[ 2 ]、OP、X、Y、K。

構造体BIT {
     長い 長いC [MAXN]。
    INT lowbit(INT X){
         戻り X&( - X)。
    }
    ボイド更新(int型のx、長い K){
         ためのint型 ; I <= N; I + = I = X lowbit(I))
            C [I] + = K。
    }
    長い 長いクエリ(INT X){
         長い 長い RET = 0 int型 I = X; I; I - = lowbit(I))
            題する + = C [i]は、
        戻る権利を。
    }
} T。

INT メイン(){
    scanf関数(" %D%D "、&​​N、&M)。
    以下のためにINT iが= 1 ; I <= N; I ++ ){
        scanf関数(" %のD "、および[I%2 ])。
        t.update(I、[I 2 ] - [(I- 1)%2 ])。
    }
    以下のためにINT iは= 1 ; I <= M; I ++ ){
        scanf関数(" %D%D "、&​​OP、およびX)
        もし(OP == 1 ){
            scanf関数(" %D%D "、&​​Y、&K)。
            t.update(X、K)。
            t.update(Y + 1、 - K)。
        }
        もし(上== 2 
            printf(" %のLLD \ n " 、t.query(X));
    }
    リターン 0 ;
}

 

おすすめ

転載: www.cnblogs.com/mogeko/p/11837764.html