POJ 3264 线段树 暴力之...
2013-10-01 15:59
337 查看
同2823..
#include "stdio.h" #include "string.h" #include "stdlib.h" #include "math.h" struct comp { int l,r,mid; int max,min; } data[300001]; int max,min; int maxx(int a,int b) { if (a<b) return b; else return a; } int minx(int a,int b) { if (a<b) return a; else return b; } void build(int l,int r,int k) { data[k].l=l; data[k].r=r; data[k].mid=(l+r)/2; if (l==r) { scanf("%d",&data[k].min); data[k].max=data[k].min; return ; } build(l,data[k].mid,k*2); build(data[k].mid+1,r,k*2+1); data[k].max=maxx(data[k*2].max,data[k*2+1].max); data[k].min=minx(data[k*2].min,data[k*2+1].min); } void query(int l,int r,int k) { if (data[k].l==l && data[k].r==r) { if (data[k].max>max) max=data[k].max; if (data[k].min<min) min=data[k].min; return ; } if (r<=data[k].mid) query(l,r,k*2); else if (l>data[k].mid) query(l,r,k*2+1); else { query(l,data[k].mid,k*2); query(data[k].mid+1,r,k*2+1); } } int main() { int n,m,x,y; while (scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while (m--) { max=-0x7fffffff; min=0x7fffffff; scanf("%d%d",&x,&y); if (x==y) { printf("0\n"); continue; } query(x,y,1); printf("%d\n",max-min); } } return 0; }
相关文章推荐
- 线段树_POJ_3264
- poj 3264 Balanced Lineup 线段树
- POJ 3264 Balanced Lineup(线段树,简单区间query)
- POJ 3264 - Balanced Lineup(线段树)
- poj3264——Balanced Lineup(线段树+区间最大值与最小值)
- POJ-3264 Balanced Lineup (线段树 基本题)
- poj 3264 Balanced Lineup(基础线段树)
- POJ 3264 Balanced Lineup 线段树基础
- POJ-3264-Balanced Lineup(裸线段树)
- 【转】POJ 3264 线段树解法
- 线段树查询模板(POJ 3264)
- poj_3264_Balanced Lineup(线段树)
- POJ 3264 Balanced Lineup RMQ / 线段树
- poj 3264 Balanced Lineup 线段树
- Balanced Lineup (POJ_3264) 线段树+区间查询
- POJ 3264 Balanced Lineup 线段树 单点更新 求区间最值
- poj 3264 线段树
- POJ 3264 Balanced Lineup 线段树的构建+区间查询
- poj 3264 线段树最值更新
- poj 3264 Balanced Lineup(基础线段树)