如題,已知乙個數列,你需要進行下面兩種操作:
1.將某乙個數加上x
2.求出某區間每乙個數的和
第一行包含兩個整數n、m,分別表示該數列數字的個數和操作的總個數。
第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。
接下來m行每行包含3個整數,表示乙個操作,具體如下:
操作1: 格式:1 x k 含義:將第x個數加上k
操作2: 格式:2 x y 含義:輸出區間[x,y]內每個數的和
輸出包含若干行整數,即為所有操作2的結果。
5 51 5 4 2 3
1 1 3
2 2 5
1 3 -1
1 4 2
2 1 4
1416
時空限制:1000ms,128m
資料規模:
對於30%的資料:n<=8,m<=10
對於70%的資料:n<=10000,m<=10000
對於100%的資料:n<=500000,m<=500000
#include
#define ll long long
#define maxn 500010
#define n 201
#define inf 0x3f3f3f3f
#define gtc() getchar()
using
namespace std;
template
<
class
t>
inline
void
read
(t &s)
while
(isdigit
(ch)
) s *
= w;
}template
<
class
t>
inline
void
write
(t x)
int n, m, t[maxn]
;inline
intlowbit
(int x)
inline
void
add(
int x,
int k)
}inline
intsum
(int x)
return ans;
}int
main()
for(
int i =
1; i <= m;
++i)
else
}return0;
}
樹狀陣列部分例題
poj 1037 給出n個星星的座標,如果乙個星星的左下方 包含正左和正下 有k顆星星,就說這顆星星是k級的,統計每個等級有多少個點。這題可用樹狀陣列,對於每個星星按y座標從小到大排序,相同y座標按x座標從小到大排序 題目中資料已經有序 輸入順序已排好序,那麼只要依次統計星星i之前x座標小於等於i....
樹狀陣列1 樹狀陣列入門
仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...
模板 樹狀陣列1
這篇是樹狀陣列模板1 主要內容有 1.將某數加上x 2.求某區間和 也就是說支援單點修改 關於樹狀陣列的部落格講解 見基本介紹 include include include using namespace std define in read typedef long long ll const ...