codevs1081 線段樹練習 2

2022-06-03 22:12:12 字數 1018 閱讀 1510

給你n個數,有兩種操作

1:給區間[a,b]的所有數都增加x

2:詢問第i個數是什麼?

第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,表示操作的個數. 接下來q行每行若干個整數。如果第乙個數是1,後接3個正整數a,b,x,表示在區間[a,b]內每個數增加x,如果是2,後面跟1個整數i, 表示詢問第i個位置的數是多少。

對於每個詢問輸出一行乙個答案31

2321 2 3 2

2 35

資料範圍

1<=n<=100000

1<=q<=100000

這題是線段樹區間修改的模板題,可以用懶標記去做。

但是這題可以不用懶標記去做。我們可以用線段樹的葉子節點記錄每個點的真實值。然後非葉子節點記錄的是這個區間增加的值,我們要求這個點的值的話,直接從根節點搜到葉子節點求和就行了。

#include#include

#include

#include

using

namespace

std;

const

int maxn=100000+5

;inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int

n,m,len;

inta[maxn];

struct

node

tr[maxn

<<1

];inline

void bt(int x,inty)}

inline

void update(int now,int x,int y,int

k) }

}inline

int query(int now,intx)}

intmain()

else

if(p==2

)

}return0;

}

Codevs 1081 線段樹練習 2

1081 線段樹練習 2 時間限制 1 s 空間限制 128000 kb 題目等級 大師 master 傳送門題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數都增加x 2 詢問第i個數是什麼?輸入描述 input description 第一行乙個正整數n,接下...

線段樹模版 codevs1081線段樹練習2

題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數都增加x 2 詢問第i個數是什麼?輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,表示操作的個數.接下來q行每行若干個整數。如果第乙個數是1,後接3個正整...

codevs 1081 線段樹練習 2 線段樹

題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數都增加x 2 詢問第i個數是什麼?輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,表示操作的個數.接下來q行每行若干個整數。如果第乙個數是1,後接3個正整...