ゲート
間隔、問い合わせの単一の点を変更します。
違いによるメンテナンス。
そのクエリが返す(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 ; }