Codevs 1081 線段樹練習 2

2022-02-13 09:44:27 字數 2266 閱讀 4005

1081 線段樹練習 2

時間限制: 1 s

空間限制: 128000 kb

題目等級 :大師 master

傳送門題目描述 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

3 1

2 3

2 1 2 3 2

2 3

樣例輸出 sample output

5 資料範圍及提示 data size & hint

資料範圍

1<=n<=100000

1<=q<=100000

/*

裸線段樹.

單點查詢+區間修改.

*/#include

#include

#define maxn 100001

using namespace std

;struct data

tree[maxn*4];

int aa[maxn+10],n,m,cut,tot;

void bluid(int l,int r)

int mid=(l+r)>>1

; tree[k].lc=cut+1

; bluid(l,mid);

tree[k].rc=cut+1

; bluid(mid+1,r);

tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;}

void updata(int k)

void add(int k,int l,int r,int add1)

if(tree[k].bj) updata(k);

int mid=(tree[k].l+tree[k].r)>>1

; if(l<=mid) add(tree[k].lc,l,r,add1);

if(r>mid) add(tree[k].rc,l,r,add1);

tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;}

int query(int k,int l,int r)

if(tree[k].bj) updata(k);

int mid=(tree[k].l+tree[k].r)>>1

; if(l<=mid) return query(tree[k].lc,l,r);

if(r>mid) return query(tree[k].rc,l,r);

}int main()

bluid(1,n);

cin>>m;

for(int i=1

;i<=m;i++)

else

}}

/*

樹狀陣列 區間修改 單點查詢.

比線段樹不知道要快到那裡去.

和區間修改維護的東西不同.

差分化區間修改為單點修改.

例:[2,5]+2 只需處+2

6處-2即可.

*/#include

#include

#define maxn 100001

ints[maxn],n,x,y,m,z;

intread()

while(ch>='0'&&ch<='9')x=x

*10+ch-48,ch=getchar();

return

x*f;

}int lowbit(int t)

void add(int t,intx)}

int query(int

x) return tot;

}int main()

m=read();

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

else

}return

0;}

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

codevs 1081 線段樹練習 2 線段樹

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