線段樹:線段樹用來儲存區域資訊
主要有五種操作:
建樹、單點查詢、單點修改、區間查詢、區間修改。
注意和樹狀陣列一樣不能處理位置0
#includeusingview codenamespace
std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define ri(n) scanf("%d",&(n))
#define rii(n,m) scanf("%d%d",&n,&m)
#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define rs(s) scanf("%s",s);
#define ll long long
#define pb push_back
#define rep(i,n) for(int i=0;i
#define clr(a,v) memset(a,v,sizeof a)
/////////////////////////////////
/#define inf 0x3f3f3f3f
#define lson l,m,pos<<1
#define rson m+1,r,pos<<1|1
const
int n=100000+2
;ll sum[n
<<2],col[n<<2
];void up(int
pos)
void down(int pos,intm)}
void build(int l,int r,int
pos)
int m=(l+r)>>1
; build(lson);
build(rson);
up(pos);
}void update(int l,int r,int v,int l,int r,int
pos)
down(pos,r-l+1
);
int m=(l+r)>>1
;
if(l<=m)update(l,r,v,lson);
if(r>m)update(l,r,v,rson);
up(pos);
}ll query(
int l,int r,int l,int r,int
pos)
down(pos,r-l+1
); ll ans=0
;
int m=(l+r)>>1
;
if(l<=m)ans+=query(l,r,lson);
if(r>m)ans+=query(l,r,rson);
return
ans;
}
線段樹 01 線段樹基礎
物理上 public class segmenttree public int getsize public e get int index 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引 private int leftchild int index 返回完全二叉樹的陣列表示中...
線段樹 基礎
d 基礎 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿...
線段樹基礎
寫得不錯啊。前段時間寫了篇 搞懂樹狀陣列 如果說樹狀陣列是優雅的,那麼線段樹就是萬能的。有句話就叫 樹狀陣列能做的線段樹都能做,但是樹狀陣列能做的堅決用樹狀陣列!因為線段樹本來的內容狠豐富的,主要有單點跟新 區間跟新,最值詢問 區間詢問 反正就是對於區間進行的動態跟新詢問都能較高效的完成。對於初學者...