P3374 模板 樹狀陣列 1

2022-08-15 14:42:14 字數 1179 閱讀 7483

如題,已知乙個數列,你需要進行下面兩種操作:

1.將某乙個數加上x

2.求出某區間每乙個數的和

輸入格式:

第一行包含兩個整數n、m,分別表示該數列數字的個數和操作的總個數。

第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。

接下來m行每行包含3個整數,表示乙個操作,具體如下:

操作1: 格式:1 x k 含義:將第x個數加上k

操作2: 格式:2 x y 含義:輸出區間[x,y]內每個數的和

輸出格式:

輸出包含若干行整數,即為所有操作2的結果。

輸入樣例#1: 複製

5 5

1 5 4 2 3

1 1 3

2 2 5

1 3 -1

1 4 2

2 1 4

輸出樣例#1: 複製

14

16

時空限制:1000ms,128m

資料規模:

對於30%的資料:n<=8,m<=10

對於70%的資料:n<=10000,m<=10000

對於100%的資料:n<=500000,m<=500000

樣例說明:

故輸出結果14、16

#include#include

#include

#include

#include

#define n 500000+10

#define lowbit(x) x&(-x)

#define ll long long

using

namespace

std;

ll a[n],sum[n],b[

2][n],n,m;

ll read()

while(s<='

9' && s>='0')

return x*f;

}ll ask(

intopt,ll x)

void add(int

opt,ll x,ll k)

intmain()

else

}return0;

}

P3374 模板 樹狀陣列 1

如題,已知乙個數列,你需要進行下面兩種操作 1.將某乙個數加上x 2.求出某區間每乙個數的和 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3個整數,表示乙個操作,具體如下 操作1 格式 1 ...

P3374 模板 樹狀陣列 1 題解

同步 原題鏈結 給定乙個長度為 n nn 的陣列,q qq 組操作 顯然,假設你現在什麼也不會。我們只考慮第 2 22 個操作,即先不考慮修改,如何處理區間和的詢問?顯然,對於初始的陣列 a ia i ai 只需要做乙個字首和 s ss 使得 s j i 1 ja is j sum j a i sj...

題解 P3374 模板 樹狀陣列 1

最簡單的zkw線段樹就十分適合這道題,為什麼用zkw線段樹,可以看一下以下精簡 我們只需要用到單點修改,區間查詢就好了。include define go i,j,n,k for int i j i n i k define fo i,j,n,k for int i j i n i k define...