給你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個正整...