[线段树] POJ - 3264 Balanced Lineup
2017-05-25 20:50
399 查看
**[线段树] POJ - 3264 Balanced Lineup**
题目大意:给你1-n头牛,牛的身高不同,有多次询问,每次给你l,r,问从l号牛到r号牛最高与最低的差值。
分析:结点保存当前区间最高与最低,查询即可。
#include<stdio.h> #include<algorithm> using namespace std; const int INF=0Xffff0; int maxv=INF; int minv=-INF; struct node { int l,r; int maxv,minv; int mid() { return (l+r)/2; } }; node tree[800010]; void BuildTree(int root,int l,int r) { tree[root].l=l; tree[root].r=r; tree[root].maxv=-INF; tree[root].minv=INF; if(l!=r) { BuildTree(2*root+1,l,(l+r)/2); BuildTree(2*root+2,(l+r)/2+1,r); } } void Insert(int root,int i,int v) { if(tree[root].l==tree[root].r) { tree[root].minv=tree[root].maxv=v; return ; } tree[root].minv=min(tree[root].minv,v); tree[root].maxv=max(tree[root].maxv,v); if(i<=tree[root].mid()) { Insert(2*root+1,i,v); } else { Insert(2*root+2,i,v); } } void Query(int root,int s,int e) { if(tree[root].minv>=minv&&tree[root].maxv<=maxv) return; if(tree[root].l==s&&tree[root].r==e) { minv=min(minv,tree[root].minv); maxv=max(maxv,tree[root].maxv); return; } if(e<=tree[root].mid()) { Query(2*root+1,s,e); } else if(s>tree[root].mid()) { Query(2*root+2,s,e); } else { Query(2*root+1,s,tree[root].mid()); Query(2*root+2,tree[root].mid()+1,e); } } int main() { int n,q,h; scanf("%d %d",&n,&q); BuildTree(0,1,n); for(int i=1;i<=n;i++) { scanf("%d",&h); Insert(0,i,h); } // for(int i=0;i<=25;i++) // printf("root:%d l:%d r:%d min:%d max:%d\n",i,tree[i].l,tree[i].r,tree[i].maxv,tree[i].minv); for(int i=0;i<q;i++) { int s,e; scanf("%d %d",&s,&e); 926d minv=INF; maxv=-INF; Query(0,s,e); printf("%d\n",maxv-minv); } return 0; }
相关文章推荐
- poj 3264 Balanced Lineup(基础线段树)
- POJ3264-Balanced Lineup-线段树
- poj 3264 Balanced Lineup[线段树,,水]
- poj 3264 Balanced Lineup(rmq vs 线段树)
- 【线段树 + 详细注释】北大 poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup(基础线段树)
- POJ3264 Balanced Lineup(线段树静态)
- Balanced Lineup - POJ 3264 - 线段树
- Poj3264 Balanced Lineup 线段树基础题
- poj 3264 Balanced Lineup(线段树)
- 【线段树】poj 3264 Balanced Lineup(外:hdu 1754 I Hate It)
- POJ3264——Balanced Lineup(线段树)
- POJ 3264-Balanced Lineup, NYOJ 119-士兵杀敌3 线段树
- POJ - 3264 Balanced Lineup 线段树解RMQ
- poj 3264 Balanced Lineup 线段树
- poj 3264 Balanced Lineup(基础线段树)
- [线段树] POJ 3264 balanced lineup
- poj 3264 Balanced Lineup(线段树单点修改区间查询)
- POJ---3264-Balanced Lineup (线段树)
- POJ 3264 Balanced Lineup (线段树)