POJ 3264 Balanced Lineup
来源:互联网 发布:小猪cms三网合一源码 编辑:程序博客网 时间:2024/05/17 23:32
题目链接
题目大意:求区间[A,B]最大最小值的差。
题解:
线段树,或者RMQ。
以下是线段树程序。
#include <cstdio>#include <iostream>using namespace std;#define Maxn 50005#define INF 100000000struct Node{ int l,r; int tall,shor;}tr[Maxn << 2];int num[Maxn];int low,hei;void Build(int left,int right,int u){ tr[u].l = left; tr[u].r = right; if (tr[u].l == tr[u].r) { tr[u].tall = num[left]; tr[u].shor = num[left]; return ; } int mid = (tr[u].l+tr[u].r)/2; Build(left,mid,2*u); Build(mid+1,right,2*u+1); tr[u].tall = max (tr[2*u].tall,tr[2*u+1].tall); tr[u].shor = min (tr[2*u].shor,tr[2*u+1].shor); }void query (int left,int right,int u){ if (tr[u].l == left&&tr[u].r == right) { low = min (low,tr[u].shor); hei = max (hei,tr[u].tall); return ; } int mid = (tr[u].l + tr[u].r)/2; if (right <= mid) query (left,right,2*u); else if (left >= mid + 1) query (left,right,2*u+1); else { query(left,mid,2*u); query (mid+1,right,2*u+1); }}int main (){ int n,m,a,b; scanf ("%d%d",&n,&m); for (int i = 1;i <= n;i ++) scanf ("%d",&num[i]); Build(1,n,1); while (m--) { scanf ("%d%d",&a,&b); low = INF; hei = 0; query (a,b,1); printf ("%d\n",hei - low); } return 0;}
0 0
- 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
- 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
- Objective-C: 方法选择器、协议选择器
- [SCOI2005]骑士精神
- 指针、进程空间、字符串
- SqlServer2008 安装时提示 VSShellInstalledRule 错误(没有安装VS2008sp1补丁)如何忽略。
- PHP的国内外的主流框架及下载地址
- POJ 3264 Balanced Lineup
- ZPL
- 【转载】mysql 数据类型
- pull解析
- spring4.x注解概述
- 每天一条linux命令 学习-- cd和pwd命令
- BZOJ【1085】骑士精神
- 文章标题
- 极客学院-Html5个人笔记总结