樹狀陣列模板題 & (樹狀陣列 1:單點修改,區間查詢)
題目描述
這是LibreOJ上的樹狀陣列模板題,這個題考查的點是單點修改和區間查詢。在此附上一版我的AC程式碼:
#include<iostream>
using namespace std;
typedef long long ll;//這個題必須用int會爆。
ll n, q;
ll a[1000000+10];//a是原陣列
ll c[1000000+10];//b是維護a的樹狀陣列。
ll lowbit(ll x)
{
return x & -x;
}
void creat(){
for(ll i=1;i<=n;i++){
c[i]+=a[i];
ll j=i+lowbit(i);
if(j<=n) c[j]+=c[i];
}
}
//建樹函式。
void add(ll x, ll k){
while(x<=n){
c[x]+=k;
x+=lowbit(x);
}
}
//單點修改函式。
ll getsum(ll x){
ll sum=0;
while(x>=1){
sum+=c[x];
x-=lowbit(x);
}
return sum;
}
//求前x項和函式.
int main()
{
scanf("%lld%lld", &n,&q);
for(ll i=1;i<=n;i++){
scanf("%lld", &a[i]);
}
creat();
ll flag, a, b;
for(ll i=1;i<=q;i++){
scanf("%lld%lld%lld", &flag, &a, &b);
if(flag==1) {
add(a,b);
} else if(flag==2){
ll sumda, sumxiao;
sumda = getsum(b);
sumxiao = getsum(a-1);
sumda-=sumxiao;//區間和可以看做是倆個字首和的差。
printf("%lld\n", sumda);
}
}
return 0;
}
相關文章
- 樹狀陣列單點更新和區間查詢陣列
- 樹狀陣列的區間查詢與區間修改陣列
- 變化的區間樹狀陣列,單點查詢陣列
- HDU 1556【區間更新+單點查詢 樹狀陣列】陣列
- HDU 1556-Color the ball(樹狀陣列-區間修改 單點查詢)陣列
- 【樹狀陣列 區間更新區間查詢】code陣列
- HDU1166 敵兵佈陣【樹狀陣列 單點修改+區間查詢】陣列
- POJ 3468 【區間修改+區間查詢 樹狀陣列 | 線段樹 | 分塊】陣列
- POJ 2155-Matrix(二維樹狀陣列-區間修改 單點查詢)陣列
- 【樹狀陣列 區間修改,單點求值】1556 Color the ball陣列
- 樹狀陣列模板+習題集陣列
- 【樹狀陣列 單點修改,區間求值】hdu 1166 敵兵佈陣陣列
- 【筆記/模板】樹狀陣列筆記陣列
- 樹狀陣列陣列
- 洛谷題單指南-二叉堆與樹狀陣列-P3368 【模板】樹狀陣列 2陣列
- 解析樹狀陣列陣列
- D 區間求和 [數學 樹狀陣列]陣列
- 線段樹+差分——【模板】樹狀陣列2陣列
- 10:Challenge 3(樹狀陣列直接修改)陣列
- 樹狀陣列詳解陣列
- 樹狀陣列基礎陣列
- poj 2481 樹狀陣列陣列
- hdu 3874 樹狀陣列陣列
- 二維樹狀陣列陣列
- 【luogu3368】模板 樹狀陣列 2陣列
- T4701 【卜卜】樹狀陣列模板陣列
- POJ 1195-Mobile phones(二維樹狀陣列-區間更新區間查詢)陣列
- 關於區間操作查詢(字首和與差分)+樹狀陣列基礎陣列
- 樹狀陣列和逆序對陣列
- hdu 5147 樹狀陣列陣列
- 樹狀陣列快速入門陣列
- 線段樹(1)建樹、單點修改、單點查詢、區間查詢和例題
- POJ3468 A Simple Problem with Integers---樹狀陣列(區間問題)陣列
- 求區間不同數的個數【樹狀陣列求解】陣列
- 樹狀陣列3種基本操作陣列
- 學習筆記----樹狀陣列筆記陣列
- 樹狀陣列upc1976陣列
- CSU 4441 Necklace (樹狀陣列/LIS)陣列