線段樹的單點修改加區間修改

2021-08-22 00:05:58 字數 1507 閱讀 8952

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.線段樹的每個葉節點都代表乙個長度為...