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