POJ 3264 Balanced Lineup (线段树)
来源:互联网 发布:马岛海战 知乎 编辑:程序博客网 时间:2024/06/15 03:47
区间查询最大与最小值,并求其差,两个query分别找最大最小求差就行了。。。4000+ms险过
#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#include<cstring>using namespace std;#define MAXN 50500struct segTree{ int minn,maxn; int l,r;}tree[MAXN<<3];void build(int root,int ibegin,int iend){ tree[root].l=ibegin; tree[root].maxn=0; tree[root].minn=100000000; tree[root].r=iend; if(ibegin==iend) return; int mid=(ibegin+iend)/2; build(root*2+1,ibegin,mid); build(root*2+2,mid+1,iend);}void update(int root,int laz, int x){ if(laz<tree[root].l||laz>tree[root].r) return ; if(tree[root].l==tree[root].r) { tree[root].maxn=max(tree[root].maxn,x); tree[root].minn=min(tree[root].minn,x); return; } int mid=(tree[root].l+tree[root].r)/2; if(laz<=mid) update(root*2+1,laz,x); else update(root*2+2,laz,x); tree[root].maxn=max(tree[root*2+1].maxn,tree[root*2+2].maxn); tree[root].minn=min(tree[root*2+1].minn,tree[root*2+2].minn);}int queryminn(int root,int ibegin,int iend){ if(iend<tree[root].l||ibegin>tree[root].r) return -1; if(tree[root].l==ibegin&&tree[root].r==iend) return tree[root].minn; int mid=(tree[root*2+1].l+tree[root*2+2].r)/2; if(mid<ibegin) return queryminn(root*2+2,ibegin,iend); else if(iend<=mid) return queryminn(root*2+1,ibegin,iend); else return min(queryminn(root*2+1,ibegin,mid), queryminn(root*2+2,mid+1,iend));}int querymaxn(int root,int ibegin,int iend){ if(iend<tree[root].l||ibegin>tree[root].r) return -1; if(tree[root].l==ibegin&&tree[root].r==iend) return tree[root].maxn; int mid=(tree[root*2+1].l+tree[root*2+2].r)/2; if(mid<ibegin) return querymaxn(root*2+2,ibegin,iend); else if(iend<=mid) return querymaxn(root*2+1,ibegin,iend); else return max(querymaxn(root*2+1,ibegin,mid), querymaxn(root*2+2,mid+1,iend));}int main(){ int n,q;int a; while(cin>>n>>q) { build(0,1,n); for(int i=1;i<=n;i++) { scanf("%d",&a); update(0,i,a); } int l,r; for(int i=1;i<=q;i++) { scanf("%d%d",&l,&r); cout<<querymaxn(0,l,r)-queryminn(0,l,r)<<endl; } }}
阅读全文
0 0
- poj 3264 Balanced Lineup rmq/线段树
- 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 线段树
- Poj 3264 Balanced Lineup - 线段树
- POJ 3264 - Balanced Lineup(线段树)
- POJ 3264 Balanced Lineup (RMQ线段树)
- 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( 线段树&&RMQ )
- POJ 3264 Balanced Lineup 线段树
- 《JSON必知必会》学习笔记(一)
- NYOJ 题目62 笨小熊
- pyCharm注册码
- 短期股价走势的预测信息(1)_神秘的尾盘30分钟_数量化专题之八十四(未完)
- js 函数传参
- POJ 3264 Balanced Lineup (线段树)
- 未知:独立集——题解
- dos命令大全
- java常见的面试题
- LeetCode_Easy心得:27. Remove Element(C语言)
- 小白装逼:Android retrofit2+rxjava
- js定时器setInterval()与setTimeout()区别
- Linux线程的实质
- AD中通过开窗来绘制不规则的焊盘