Codevs1080 線段樹練習

2022-05-16 06:04:16 字數 2348 閱讀 3487

題目描述 description

一行n個方格,開始每個格仔裡都有乙個整數。現在動態地提出一些問題和修改:提問的形式是求某乙個特定的子區間[a,b]中所有元素的和;修改的規則是指定某乙個格仔x,加上或者減去乙個特定的值a。現在要求你能對每個提問作出正確的回答。1≤n<100000,,提問和修改的總數m<10000條。

輸入描述 input description

輸入檔案第一行為乙個整數n,接下來是n行n個整數,表示格仔中原來的整數。接下乙個正整數m,再接下來有m行,表示m個詢問,第乙個整數表示詢問代號,詢問代號1表示增加,後面的兩個數x和a表示給位置x上的數值增加a,詢問代號2表示區間求和,後面兩個整數表示a和b,表示要求[a,b]之間的區間和。

輸出描述 output description

共m行,每個整數

樣例輸入 sample input

4 5 

6 2 

1 1 3 5

2 1 4

1 1 9

2 2 6

樣例輸出 sample output

資料範圍及提示 data size & hint

1≤n≤100000, m≤10000 。

樹狀陣列:

**一篇詳解:

1 #include2 #include3 #include4

using

namespace

std;56

intn,m;

7int f[100001];8

9int

read()

1013

while(ch>='

0'&&ch<='9')

14return x*f;15}

1617

int lowbit(int

x)18

2122

void update(int x,int

num)

2329}30

31int sum(int

x)32

39return

sum;40}

4142

intmain()

4354

return0;

55 }

線段樹:

1 #include2 #include3 #include4

using

namespace

std;56

struct

data

7tree[400000

];10

int n,m,a[100001

];11

12int

read()

1316

while(ch>='

0'&&ch<='9')

17return x*f;18}

1920

void build(int k,int s,int

t)21

24int mid=(s+t)>>1

;25 build(k<<1

,s,mid);

26 build(k<<1|1,mid+1

,t);

27 tree[k].sum=tree[k<<1].sum+tree[k<<1|1

].sum;28}

2930

int sum(int k,int s,int

t)31

3940

void update(int k,int x,int

y)41

4950

intmain()

5163

return0;

64 }

zkw線段樹:張昆瑋 神的不能再神了

1 #include2 #include3 #include4

using

namespace

std;56

const

int m=261244;7

8int

n,m;

9int f[524289

];10

11int

read()

1215

while(ch>='

0'&&ch<='9')

16return x*f;17}

1819

void update(int x,int

num)

2024

25int query(int s,int

t)26

33return

ans;34}

3536

intmain()

3748

return0;

49 }

Codevs 1080 線段樹練習

portal 這道題倒是點醒了我 樹狀陣列和線段樹不一樣 半小時前才學的概念傻傻分不清 主要思路是利用樹狀陣列儲存字首和,然後字首和相減得到區間和。線段樹的知識在藍書裡出現了,莫名其妙就從紫書公升級了?mark下我看的那篇部落格 這位也是厲害,用三種方法 include includeusing n...

Codevs 1080 線段樹練習

1080 線段樹練習 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 傳送門題目描述 description 一行n個方格,開始每個格仔裡都有乙個整數。現在動態地提出一些問題和修改 提問的形式是求某乙個特定的子區間 a,b 中所有元素的和 修改的規則是指定某乙個格仔x...

codevs1080線段樹練習(線段樹)

題目描述 description 一行n個方格,開始每個格仔裡都有乙個整數。現在動態地提出一些問題和修改 提問的形式是求某乙個特定的子區間 a,b 中所有元素的和 修改的規則是指定某乙個格仔x,加上或者減去乙個特定的值a。現在要求你能對每個提問作出正確的回答。1 n 100000,提問和修改的總數m...