const int maxn=1e6+5;
int a[maxn]; //存每個數的值
struct node
tree[maxn*4];
void pushup(int id) //區間合併
void pushdown() //區間下放,進行區間修改的時候用到
void build(int id,int ll,int rr) //建樹
int mid=(ll+rr)/2;
//mid=ll+rr>>1;
build(id*2,ll,mid);
build(id*2+1,mid+1,rr);
//build(id<<1,ll,mid);
//build(id<<1|1,mid+1,rr);
pushup(id);
}void update(int id,int x,int y) //修改
int mid=(tree[id].ll+tree[id].rr)/2;
if(x<=mid)
update(id*2,x,y);
else
update(id*2+1,x,y);
pushup(id);
}int query(int id,int x,int y) //查詢
const int maxn=1e6+5;
long long int a[maxn];
long long int lazy[maxn*4]; //存每個數的值
struct node
tree[maxn*4];
void pushup(int id) //區間合併
void pushdown(int id) //區間下放,進行區間修改的時候用到
}void build(int id,int ll,int rr) //建樹
int mid=(ll+rr)/2;
//mid=ll+rr>>1;
//build(ltree);
//build(rtree);
build(id<<1,ll,mid);
build(id<<1|1,mid+1,rr);
pushup(id);
}void update(int id,int x,int y,int z) //修改
int mid=(tree[id].ll+tree[id].rr)/2;
pushdown(id);
if(y<=mid)
update(id*2,x,y,z);
else if(x>=mid+1)
update(id*2+1,x,y,z);
else
pushup(id);
}long long int query(int id,int x,int y) //查詢
樹狀陣列區間修改加區間查詢
其實之前在k大數查詢中就已經用到了,只是一直沒有說明 所以今天就來補個欠賬。感覺單點修改 區間查詢和區間修改 單點查詢沒什麼必要講,這裡就只講區間修改 區間查詢 其實也不難 設原陣列第 i 位的值為 a i d i a i a 則有 這裡認為 a 0 0 a x sum x d i 所以有 sum ...
線段樹(區間修改 加減法)
include include define maxsize 1000 using namespace std 定義樹結點結構 struct nodetree maxsize 線段樹需要開闢 4 n 1 的空間 void build tree int arr node tree,int i,int ...
線段樹 建樹 單點修改 單點 區間查詢
線段樹 sgement tree 是一種分治思想的二叉樹結構,用於在區間上進行資訊統計。與按照二進位制位進行區間劃分的樹狀陣列相比,線段樹是一種更加通用的結構 1.線段樹的每個節點都代表乙個區間。2.線段樹具有唯一的根節點,代表的區間是整個統計範圍,如 1,n 3.線段樹的每個葉節點都代表乙個長度為...