poj3264,Balanced Lineup,线段树
2015-01-06 09:33
337 查看
简单的线段树
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 50100 #define ls (p<<1) #define rs (p<<1|1) #define mid(p) (t[p].l+t[p].r>>1) int v ; struct segmentTree{ int l,r,mi,ma; }t[N*4]; void build(int l,int r,int p){ t[p].l=l;t[p].r=r; if (t[p].l==t[p].r){ t[p].mi=t[p].ma=v[l]; return; } int m=mid(p); build(l,m,ls); build(m+1,r,rs); t[p].mi=min(t[ls].mi,t[rs].mi); t[p].ma=max(t[ls].ma,t[rs].ma); } int query(int l,int r,int p,int func){ if (l==t[p].l&&r==t[p].r){ if (!func) return t[p].mi; else return t[p].ma; } int m=mid(p); if (r<=m) { return query(l,r,ls,func); } else if (l>m){ return query(l,r,rs,func); } else { int t1=query(l,m,ls,func); int t2=query(m+1,r,rs,func); if (!func) return min(t1,t2); else return max(t1,t2); } } int main(){ int i; int n,m,a,b,mi,ma; while(scanf("%d%d",&n,&m)!=EOF){ for(i=1;i<=n;++i){ scanf("%d",&v[i]); } build(1,n,1); for(i=1;i<=m;++i){ scanf("%d%d",&a,&b); mi=query(a,b,1,0); ma=query(a,b,1,1); printf("%d\n",ma-mi); } } return 0; }
相关文章推荐
- POJ3264 Balanced Lineup(线段树入门)
- poj3264(线段树) Balanced Lineup
- POJ3264 Balanced Lineup(线段树)
- 【北大夏令营笔记-线段树】POJ3264-Balanced Lineup
- poj3264 -- Balanced Lineup 一维RMQ 线段树
- poj3264 Balanced Lineup(线段树)
- POJ3264 Balanced Lineup 【线段树】+【单点更新】
- POJ3264_Balanced Lineup(线段树/单点更新)
- POJ3264 Balanced Lineup---线段树
- POJ3264 Balanced Lineup(线段树,区间最值)
- poj3264_Balanced Lineup_线段树
- [POJ3264]Balanced Lineup(线段树,区间最值差)
- NYOJ119 士兵杀敌(三)&&poj3264 Balanced Lineup(线段树)
- POJ3264_Balanced Lineup_线段树维护最大值和最小值
- poj3264 Balanced Lineup(线段树)
- Balanced Lineup(poj3264,线段树入门)
- [POJ3264]Balanced Lineup(线段树,区间最值差)
- POJ3264--Balanced Lineup(线段树模板题)
- 【POJ3264】Balanced Lineup,线段树入门
- POJ3264 Balanced Lineup 【线段树】+【单点更新】