UOJ 24 樹狀陣列1

2022-05-23 09:51:09 字數 1013 閱讀 9427

【題目描述】:

如題,已知有n個元素組成的數列(下標從1開始計數),你需要進行下面兩種操作:

1.將某乙個數加上x

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

【輸入描述】:

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

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

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

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

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

【輸出描述】:

輸出包含若干行整數,即為所有操作2的結果。(輸出不超過int型別)

【樣例輸入】:

5 51 5 4 2 3

1 1 3

2 2 5

1 3 -1

1 4 2

2 1 4

【樣例輸出】:

1416

【時間限制、資料範圍及描述】:

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

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

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

本題是樹狀陣列模板題,樹狀陣列其實就是乙個字首和,且支援修改元素。

code:

#include#include#include#include#include#include#includeusing namespace std;

int n,m,i,num[500005],t[500005],l,r,h;

int lowbit(int x)

void tree(int x,int p)

return;

}int sum(int k)

return ans;

}int main()

for(i=1;i<=m;i++)

else

}return 0;

}

樹狀陣列1 樹狀陣列入門

仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...

UOJ 291 ZJOI2017 樹狀陣列

二維數點 首先推一推性質大概可以發現這是單點修改,求字尾和 其實也可以理解為區間 字首 修改,單點查詢 然後再簡單推一推就可以知道如果i被修改了a i 次,總共修改了sum次 如果l 1,算錯的情況就是sum a r 1 否則就是a l 1 a r 1 然後如果只是單點查詢,我們就可以直接線段樹 但...

模板 樹狀陣列1

這篇是樹狀陣列模板1 主要內容有 1.將某數加上x 2.求某區間和 也就是說支援單點修改 關於樹狀陣列的部落格講解 見基本介紹 include include include using namespace std define in read typedef long long ll const ...