必須:二分法,樹的基礎
拓展:補碼,反碼,移碼,lowbit()
了解什麼是線段樹及用途
線段樹,類模板題
just a hook
#include
#include
#include
#include
#include
using namespace std;
const
int t=
100009
;struct nodetree[t<<2]
;void
pushdown
(int rt)
void
build
(int l,
int r,
int rt)
build
(l,tree[rt]
.mid,rt<<1)
;build
(tree[rt]
.mid+
1,r,rt<<1|
1);}
void
add(
int l,
int r,
int v,
int rt)
if(tree[rt]
.v!=-1
)pushdown
(rt);if
(r<=tree[rt]
.mid)
else
if(l>tree[rt]
.mid)
else
}int
find
(int rt)
intmain()
printf
("case %d: the total value of the hook is %d.\n"
,++c,
find(1
));}
return0;
}
拓展:敵兵布陣
其中用到了lowbit()函式,相比其餘方法的**可以說是精簡了不少,但要明白其中的原理,還需掌握補碼,反碼,移碼等相關知識。
#include
#include
#include
#include
#include
#include
using namespace std;
int c[
50100];
intlowbit
(int t)
intgetsum
(int n)
return sum;
}void
change
(int i,
int v,
int n)
}int
main()
char cmd[10]
;while
(scanf
("%s"
,cmd)
,cmd[0]
!='e'
)else
if(cmd[0]
=='s'
)else}}
return0;
}
正常做法#include
#include
using namespace std;
const
int maxn =
5e4+10;
int ans;
struct node tree[maxn *4]
;void
build
(int left,
int right,
int rt)
int mid =
(tree[rt]
.left + tree[rt]
.right)/2
;build
(left, mid, rt *2)
;build
(mid +
1, right, rt *2+
1); tree[rt]
.sum = tree[rt *2]
.sum + tree[rt *2+
1].sum;
}void
update
(int left,
int right,
int rt,
int pos,
int add)
int mid =
(tree[rt]
.left + tree[rt]
.right)/2
;if(pos <= mid)
else
tree[rt]
.sum = tree[rt *2]
.sum + tree[rt *2+
1].sum;
}void
query
(int left,
int right,
int rt,
int l,
int r)
int mid =
(tree[rt]
.left + tree[rt]
.right)/2
;if(r <= mid)
else
if(l > mid)
else
}int
main()
cin >> a >> b;
if(str[0]
=='q'
)else
if(str[0]
=='a'
)else
if(str[0]
=='s')}
}return0;
}
最後
線段樹還有更多的用法,比如區間修改,掃瞄線,非遞迴寫法等,詳見這篇文章:
線段樹 01 線段樹基礎
物理上 public class segmenttree public int getsize public e get int index 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引 private int leftchild int index 返回完全二叉樹的陣列表示中...
關於線段樹
首先肯定推薦學姐部落格!炒雞優秀的學姐!主要是貼 並沒有什麼理論的講解。例題 洛谷p3372 模板 線段樹1 洛谷p3373 模板 線段樹2 線段樹支援單點查詢 單點修改 區間查詢 區間修改等操作。基本思想是二分 將線段樹節點用乙個結構體打包起來 建樹 build 1,1 n void build ...
線段樹 基礎
d 基礎 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿...