假設有一列數 (1 ≤ i ≤ n) ,支援如下兩種操作:
(1)將 ak 的值加 d 。( k, d 是輸入的數)
(2) 輸出 as +as+1 +…+at 。( s, t 都是輸入的數, s ≤ t )
根據操作要求進行正確操作並輸出結果。
【輸入格式】
輸入檔案第一行乙個整數n(0<=n<=100000), 第二行為 n 個整數,表示 的初始值。
第三行為乙個整數m(0<=m<=150000),表示運算元 v 下接 m 行,每行描述乙個操作,有如下兩種情況:
add k d ( 表示將 ak 加 d , 1<=k<=n , d 為整數 )
sum s t (表示輸出 as +…+at )
【輸出格式】
對於每乙個 sum 提問,輸出結果
【輸入輸出樣例】
輸入: 4
1 4 2 3
3sum 1 3
add 2 50
sum 2 3
輸出: 7
56#include
#include
using
namespace
std;
const
intmaxn
=100010;
struct
node
tree
[maxn*2
];inta[
maxn
];int
tail
,n,m
,sum;
void
modify(int
now,
intleft
,int
right
,int
st)int
lcl=
tree
[now
].lc
,rcl
=tree
[now
].rc;
intmid
=(a1
+b1)>>
1;if (right
<=
mid)
else
if (left
>=
mid)
else
}void
getsum(int
now,
intleft
,int
right)
intlcl
=tree
[now
].lc
,rcl
=tree
[now
].rc;
intmid
=(a1
+b1)>>
1;if (right
<=
mid) getsum(lcl
,left
,right);
else
if (left
>=
mid) getsum(rcl
,left
,right);
else
}void
make_tree(inta1,
intb1)
else
if (a1+1
==b1) tree
[now
].sum=a
[b1];}
intmain()
;int s,
t;for (inti=
1;i<=
m;i++)
else
modify(1
,s-1
,s,t);
}return
0;}
cogs240 數列操作 線段樹
問題描述 假設有一列數 1 i n 支援如下兩種操作 1 將 ak 的值加 d k,d 是輸入的數 2 輸出 as as 1 at s,t 都是輸入的數,s t 根據操作要求進行正確操作並輸出結果。輸入格式 輸入檔案第一行乙個整數n 0 n 100000 第二行為 n 個整數,表示 的初始值。第三行...
數列求和 線段樹基礎
線段樹基礎題 操作包括 1.點修改 2.區間修改 3.區間查詢 線段樹基礎 數列求和 include define maxn 10007 數列總個數 define ls l,m,rt 1 define rs m 1,r,rt 1 1 int sum maxn 2 add maxn 2 sum求和,a...
無聊的數列 線段樹
維護乙個數列,支援兩種操作 1 1 l r k d 給出乙個長度等於r l 1的等差數列,首項為k,公差為d,並將它對應加到a l a r 的每乙個數上。即 令a l a l k,a l 1 a l 1 k d,a l 2 a l 2 k 2d a r a r k r l d。2 2 p 詢問序列的...