线段树模板
2012-02-25 16:04
246 查看
const maxn=1000000*4; var T:array[1..maxn] of record l,r,q:longint; end; function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end; procedure build(l,r,p:longint); var mid:longint; begin T[p].l:=l; T[p].r:=r; T[p].q:=-maxlongint; if l<r then begin mid:=(l+r)div 2; build(l,mid,p+p); build(mid+1,r,p+p+1); end; end; procedure insert(i,v:longint); var p:longint; begin p:=1; while T[p].l<T[p].r do if i<=(T[p].l+T[p].r)div 2 then p:=p+p else p:=p+p+1; T[p].q:=v; while p>1 do begin p:=p shr 1; T[p].q:=max(T[p+p].q,T[p+p+1].q); end; end; function query(l,r,p:longint):longint; var mid:longint; begin if T[p].l=T[p].r then exit(T[p].q) else begin mid:=(T[p].l+T[p].r)div 2; if r<=mid then exit(query(l,r,p+p)) else if l>mid then exit(query(l,r,p+p+1)) else exit(max(query(l,mid,p+p),query(mid+1,r,p+p+1))); end; end;
相关文章推荐
- HDU 1166 线段树模板&树状数组模板
- Poj 3667 线段树区间合并 (模板)
- 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)
- 【NOIP模板】 线段树
- poj 3468 线段树区间更新,模板题
- 线段树模板
- 线段树模板-成段替换
- 【模板】线段树 1
- 线段树区间更新模板
- 线段树的代码模板
- [模板]线段树
- 线段树模板及习题
- 线段树模板(区间修改)——hdu1698
- 洛谷 P3372 【模板】线段树 1
- 【裸】线段树模板
- 线段树求逆序数(模板)
- HDOJ 5217 Brackets(zkw线段树模板+单点更新)
- [ 模板 ] 线段树区间修改
- hihocoder #1336 : Matrix Sum 二维线段树 或 二维树状数组模板
- 洛谷P3373 【模板】线段树 2