POJ 3264 Balanced Lineup 线段树 单点更新 求区间最值
2012-10-04 00:23
375 查看
//POJ 3264 Balanced Lineup 线段树 单点更新 求区间最值 /* 题意: 求区间最大值最小值之差 */ #include<stdio.h> #include<string.h> #include<stdlib.h> #define INF 100000000 #define N 50005 #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r int n,m; int big,small; int mmax[N<<2],mmin[N<<2]; int Max(int x,int y){ return x>y?x:y; } int Min(int x,int y){ return x<y?x:y; } void Pushup(int rt){ mmax[rt] = Max(mmax[rt<<1],mmax[rt<<1|1]); mmin[rt] = Min(mmin[rt<<1],mmin[rt<<1|1]); } void Build(int rt,int l,int r){ mmax[rt] = -1; mmin[rt] = INF; if(l == r) return; int mid = (l + r) >> 1; Build(lson); Build(rson); } void Update(int rt,int l,int r,int x,int val){ if(l == r){ mmax[rt] = Max(mmax[rt],val); mmin[rt] = Min(mmin[rt],val); return ; } int mid = (l + r) >> 1; if(x <= mid) Update(lson,x,val); else Update(rson,x,val); Pushup(rt); } void Query(int rt,int l,int r,int L,int R){ if(L <= l && R >= r){ big = Max(big,mmax[rt]); small = Min(small,mmin[rt]); return; } int mid = (l + r) >> 1; if(L <= mid) Query(lson,L,R); if(R > mid ) Query(rson,L,R); } int main(){ int i,x; int a,b; while(scanf("%d %d",&n,&m)!=EOF){ Build(1,1,n); for(i = 1; i <= n; ++i){ scanf("%d",&x); Update(1,1,n,i,x); } for(i = 1; i <= m; ++i){ scanf("%d %d",&a,&b); big = -1;small = INF; Query(1,1,n,a,b); printf("%d\n",big-small); } } return 0; }
相关文章推荐
- POJ 3264 Balanced Lineup (线段树单点更新 区间查询)
- POJ 3264 Balanced Lineup(线段树 单点更新 区间查询)
- POJ 3264-Balanced Lineup(线段树:单点更新,区间查询)
- POJ 3264 Balanced Lineup【简单线段树,区间最值,无更新】
- poj 3264 Balanced Lineup(线段树单点修改区间查询)
- poj_2750 Potted Flower(环形区间+线段树+单点更新)
- POJ - 2155 Matrix(二维线段树、区间更新单点查询)
- poj 1754 I Hate It --线段树(单点更新,区间求最大值)
- POJ 2029 Get Many Persimmon Trees 二维线段树 单点更新 区间求和
- Balanced Lineup POJ - 3264 (线段树单点更新)
- POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
- POJ 3264 Balanced Lineup 线段树的构建+区间查询
- POJ 3264 Balanced Lineup(线段树求区间最大最小值)
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
- POJ 3928 线段树 单点更新+区间查询
- POJ 3264 Balanced Lineup(线段树区间查询)
- POJ - 3264 Balanced Lineup (线段树 区间查询)
- POJ - 2155 Matrix (二维树状数组 + 区间修改 + 单点求值 或者 二维线段树 + 区间更新 + 单点求值)
- poj 2892 Tunnel Warfare(线段树 单点更新 区间合并)
- POJ-3264-Balanced Lineup-单点更新