1の#include <iostreamの> 2の#include <cstdioを> 3 使用して 名前空間STDを、 4 5 長い 長N、M。 6 長い 長い [ 500009 ]。 7 長い 長い C [ 500009 ]、D [ 500009 ]。 8 長い 長い lowbit(長い 長いX) 9 { 10 リターン(X&( - X)); 11 } 12 の空隙の変化(長い 長い * E、長い 長い X、長い 長K) 13 { 14 のために(int型 I = xを、iが<= N; iは+ = lowbit(I)) 15 { 16 E [I] + = K。 17 } 18 } 19 長い 長いクエリ(長い 長い * E、長い 長いX) 20 { 21 長い 長い和= 0 。 22 のためには、(int型 I = xを、I> = 1 ; I- = lowbit(I)) 23 { 24 和+ = E [I]; 25 } 26 リターン和。 27 } 28 のint main()の 29 { 30 CIN >> N >> M。 31 のためには、(int型 i = 1 ; iがn = <; iは++ ) 32 { 33 CIN >> [I]。 34 変化(C、I、[I] -a [I- 1 ])。 35 変化(D、I、(長い 長い)(I- 1)*([I] -a [I- 1 ]))。 36 } 37 のために(int型 i = 1 ; iが<= N; iが++ ) 38 { 39 COUT << C [I] << " " 。 40 } 41 COUT << ENDL。 42 のために(int型 i = 1 ; iが<= N; iが++ ) 43 { 44 COUT << D [i]は<< " " 。 45 } 46 のための(int型 iは= 1 ; I <= M iは++ ) 47 { 48 長い ロングP; 49 cinを>> のp; 50 もし(Pの== 1)// 修改 51 { 52 長い 長いR、L、V。 53 CIN >> R >> L >> V。 54 変化(C、R、V)。 55 変化(C、L + 1、 - V)。 56 変化(D、R、(長い 長い)(R- 1)* V)。 57 変化(D、L + 1、(長い 長い)-1 * V)。 58 } 59 もし(Pの== 2)// 统计 60 { 61 長い 長いR、L。 62 CIN >> R >> L。 63 長い 長い T1 =クエリ(C、R- 1)*(R- 1)-query(D、R- 1 )。 64 長い 長い T2 =クエリ(C、L)* 1- クエリ(D、L)。 65 のprintf(" %LLDする\ n "、T2- T1)。 66 } 67 } 68 リターン 0 。 69 } 70 / * 71れる 。5 2 72 。1 5 6 7 8 73れている 。1 2 3 1 //変更[2-3] + 1 74 2 2 2〜4 //クエリ 75 * /