codevs 1081 線段樹練習 2 線段樹

2022-02-20 01:03:11 字數 1790 閱讀 1183

題目描述 description

給你n個數,有兩種操作

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

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

輸入描述 input description

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

輸出描述 output description

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

樣例輸入 sample input

1 2 3 2

2 3樣例輸出 sample output

資料範圍及提示 data size & hint

資料範圍

1<=n<=100000

1<=q<=100000

思路:線段樹裸題(延遲標記都不用,資料好水);

線段樹:

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define true ture

#define false flase

using

namespace

std;

#define ll long long

intscan()

res = ch - '0'

;

while( ( ch = getchar() ) >= '

0' && ch <= '9'

) res = res * 10 + ( ch - '0'

) ;

return

res ;

}struct

istree[

200010*3

];void build_tree(int l,int r,int

pos)

int mid=(l+r)/2

; build_tree(l,mid,pos*2

); build_tree(mid+1,r,pos*2+1

); tree[pos].num=tree[pos*2].num+tree[pos*2+1

].num;

}void update(int l,int r,int change,int

pos)

int mid=(tree[pos].l+tree[pos].r)/2

;

if(r<=mid)

update(l,r,change,pos*2

);

else

if(l>mid)

update(l,r,change,pos*2+1

);

else

tree[pos].num=tree[pos*2].num+tree[pos*2+1

].num;

}int query(int l,int r,int

pos)

intmain()

else

printf(

"%d\n

",query(l,l,1

)); }

}return0;

}

view code

Codevs 1081 線段樹練習 2

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

codevs1081 線段樹練習 2

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

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

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