pku 3264Balanced Lineup
来源:互联网 发布:行知实践园 编辑:程序博客网 时间:2024/05/23 00:02
题目意思是:给你一组数,在给你一个范围,要你求这个范围里最大值与最小值的差。
思路:用线段树做,节点保存线段的左右端点,最大值和最小值。
/*
* File: main.cpp
* Author: Administrator
*
* Created on 2010年1月23日, 下午4:02
*/
#include <stdlib.h>
#include <iostream>
using namespace std;
#define N 50005
struct node {
int l, r;
int _max, _min;
} Tree[N * 3];
int a[N];
int Max(int a, int b) {
if (a >= b)return a;
else return b;
}
int Min(int a, int b) {
if (a <= b)return a;
else return b;
}
void Build_Tree(int l, int r, int k) {
Tree[k].l = l;
Tree[k].r = r;
if (l == r) {
Tree[k]._max = a[l];
Tree[k]._min = a[l];
return;
}
int mid = (l + r) / 2;
Build_Tree(l, mid, 2 * k);
Build_Tree(mid + 1, r, 2 * k + 1);
Tree[k]._max = Max(Tree[2 * k]._max, Tree[2 * k + 1]._max);
Tree[k]._min = Min(Tree[2 * k]._min, Tree[2 * k + 1]._min);
}
int Find_max(int l, int r, int k) {
if (Tree[k].l == l && Tree[k].r == r) {
return Tree[k]._max;
}
int mid = (Tree[k].l + Tree[k].r) / 2;
if (r <= mid)return Find_max(l, r, 2 * k);
else if (l > mid)return Find_max(l, r, 2 * k + 1);
else {
int a, b;
a = Find_max(l, mid, 2 * k);
b = Find_max(mid + 1, r, 2 * k + 1);
return Max(a, b);
}
}
int Find_min(int l, int r, int k) {
if (Tree[k].l == l && Tree[k].r == r) {
return Tree[k]._min;
}
int mid = (Tree[k].l + Tree[k].r) / 2;
if (r <= mid)return Find_min(l, r, 2 * k);
else if (l > mid)return Find_min(l, r, 2 * k + 1);
else {
int a, b;
a = Find_min(l, mid, 2 * k);
b = Find_min(mid + 1, r, 2 * k + 1);
return Min(a, b);
}
}
/*
*
*/
int main(int argc, char** argv) {
int n, q, i, j;
while (scanf("%d%d", &n, &q) != EOF) {
for (i = 1; i <= n; i++) {
//cin>>a[i];
scanf("%d", &a[i]);
}
Build_Tree(1, n, 1);
while (q--) {
scanf("%d%d", &i, &j);//system("pause");
int ma = Find_max(i, j, 1);
int mb = Find_min(i, j, 1);
cout << ma - mb << endl;
}
}
return (EXIT_SUCCESS);
}
- pku 3264Balanced Lineup
- Pku 3264 Balanced Lineup
- pku 3264 Balanced Lineup(RMQ)
- pku 3264 Balanced Lineup(线段树)
- pku 3264 Balanced Lineup线段树
- pku 3264 Balanced Lineup(线段树)
- Pku oj 3264 Balanced Lineup(RMQ)
- PKU-3264 Balanced Lineup (RMQ之线段树)
- PKU-3264 Balanced Lineup (RMD之ST算法)
- pku 3264 Balanced Lineup ( rmq or 线段树 )
- 线段树:Balanced Lineup(pku 3264)(解题报告)
- PKU 3274 Gold Balanced Lineup解题报告
- pku 3274 Gold Balanced Lineup(预处理,hash)
- POJ 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- 3264 Balanced Lineup //rmq
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- 背单词系统
- test
- 拉丁字母读法
- ModBus的Ruby实现-RModBus 0.4.0 发布
- 开放式遥感平台OpenRS的下载、编译与运行
- pku 3264Balanced Lineup
- MFC消息映射深入挖掘1
- 在学习C后是否还要学习C++?
- [技术讨论]“软件工程”中的“工程”如何理解
- MJ评-《孔子》-7.5分
- .LIB与.DLL
- http状态代码表
- TCP连接关闭总结
- magento -- 推荐插件 -- 客户自动升级