`
kenby
  • 浏览: 723828 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

poj 3264 RMQ 线段树

 
阅读更多

zkw式线段树解决RMQ问题,只需查询,不用更新,很简单,ps: 为什么C++比gcc快那么多啊?gcc提交3047ms,用C++

的话,只需1329ms。

 

#include <stdio.h>

#define DEBUG

#ifdef DEBUG
#define debug(...) printf( __VA_ARGS__) 
#else
#define debug(...)
#endif

#define MIN(a, b) (a) < (b) ? (a): (b)
#define MAX(a, b) (a) > (b) ? (a): (b)

#define inf 20000000
#define N 50001

struct tree_node
{
	int min, max;
};

struct tree_node tree[131072];
int cow[N];
int n, M;

int min_h, max_h;

void build_tree()
{
	int		i;

	for (M = 1; M < (n+2); M <<= 1);

	//存储数据的叶子节点
	for (i = 1; i <= n; i++) {
		tree[i+M].min = tree[i+M].max = cow[i];
	}
	//不用的叶子节点
	for (i = n+1; i%M != 1; i++) {
		tree[(i%M)+M].min = inf;
		tree[(i%M)+M].max = -1;
	}
	//分支节点
	for (i = M-1; i > 0 ; i--) {
		tree[i].min = MIN(tree[i<<1].min, tree[(i<<1)+1].min);
		tree[i].max = MAX(tree[i<<1].max, tree[(i<<1)+1].max);
	}
}

void query(int s, int t)
{
	max_h = -1;
	min_h = inf;

	for (s = s+M-1, t = t+M+1; (s^t) != 1; s >>= 1, t >>= 1) {
		if (~s&1) {
			max_h = MAX(max_h, tree[s^1].max);
			min_h = MIN(min_h, tree[s^1].min);
		}
		if (t&1) {
			max_h = MAX(max_h, tree[t^1].max);
			min_h = MIN(min_h, tree[t^1].min);
		}
	}
}

int main()
{
	int 	i, q, s, t;

	scanf("%d %d", &n, &q);
	for (i = 1; i <= n; i++) {
		scanf("%d", cow+i);
	}

	build_tree();

	while (q--) {
		scanf("%d %d", &s, &t);
		query(s, t);
		printf("%d\n", max_h-min_h);
	}

	return 0;
}
 

 

分享到:
评论

相关推荐

    poj题目分类

    * 线段树:例如 poj2528、poj2828、poj2777、poj2886、poj2750。 * 静态二叉检索树:例如 poj2482、poj2352。 * 树状树组:例如 poj1195、poj3321。 * RMQ:例如 poj3264、poj3368。 * 并查集的高级应用:例如 ...

    ACMer需要掌握的算法讲解 (2).docx

    * RMQ:POJ3264、POJ3368 * 并查集的高级应用:POJ1703、POJ2492 * KMP算法:POJ1961、POJ2406 * 左偏树(可合并堆) 四、搜索 * 最优化剪枝和可行性剪枝 * 较为复杂的动态规划:POJ1191、POJ1054、POJ3280、POJ...

    poj训练计划.doc

    这份训练计划不仅涵盖了基础的算法和数据结构,还深入到了更复杂的概念和技巧,如图算法中的差分约束系统、最小费用最大流,以及数据结构中的线段树和RMQ。此外,还涉及了高级搜索技巧和动态规划的深入应用。对于...

    ACM中的RMQ和LCA问题

    POJ 3264 Balanced Lineup和POJ 2823 Sliding Window问题则分别展示了RMQ问题在不同场景下的应用。 总的来说,RMQ和LCA是ACM中重要且实用的数据结构问题,它们涉及到动态规划、线段树、Sparse Table、并查集等多种...

    acm poj300题分层训练

    4. **高级数据结构**:如线段树、平衡树(Treap、Splay)、树状数组、RMQ(Range Minimum Query)、并查集的高级应用。poj2528、poj2777等是线段树的题目,poj2482、poj2352等涉及平衡树,poj1195、poj3321则训练了...

    ACM常用算法及其相应的练习题.docx

    * 线段树 + poj2528, poj2828, poj2777, poj2886, poj2750 * 静态二叉检索树 + poj2482, poj2352 * 树状树组 + poj1195, poj3321 * RMQ + poj3264, poj3368 * 并查集的高级应用 + poj1703, poj2492 * KMP算法 ...

    ACMer需要掌握的算法讲解.docx

    1. RMQ(poj3264, poj3368) 2. 并查集的高级应用(poj1703, poj2492) 3. KMP 算法(poj1961, poj2406) 4. 左偏树(可合并堆) 四、搜索 1. 最优化剪枝和可行性剪枝 2. 较为复杂的动态规划(如动态规划解特别的...

    poj各种分类

    在初级阶段的基础上,中级阶段涵盖了更多复杂的数据结构和算法,如差分约束系统、最小费用最大流、双连通分量、强连通分支、最小割模型等,以及线段树、树状数组、RMQ查询等高级数据结构的应用。这些内容进一步深化...

    ACM-POJ 算法训练指南

    1. **高级数据结构**:如树状数组、线段树(poj2528, poj2828, poj2777, poj2886, poj2750)。 2. **平衡树**:如AVL树、红黑树等(poj2482, poj2352)。 3. **并查集**:用于处理不相交集合的问题(poj1195, poj...

    ACM 题型

    - **线段树** - 示例题目:poj2528, poj2828, poj2777, poj2886, poj2750 - **树状数组** - 示例题目:poj2482, poj2352 - **并查集** - 示例题目:poj1195, poj3321 - **区间查询(RMQ)** - 示例题目:poj...

    RMQ与LCA ACM必备

    线段树(Segment Tree)也是一种解决RMQ问题的有效工具,可以实现O(logn)的查询和更新操作。此外,还可以通过滚动数组(Sliding Window)优化特定情况下的空间占用,如POJ 2823问题。 **LCA(Least Common ...

    很快速的提高算法能力.pdf

    对于中级阶段,深入学习 C++ 标准模板库的应用、更复杂的模拟题、差分约束系统、最小费用最大流、双连通分量等复杂图算法、线段树、静态二叉检索树、RMQ 和 KMP 算法等,都是进一步提升算法能力的关键。 总的来说,...

    ACM算法总结--最新总结的ACM算法

    1. **高级数据结构**(如poj2528, poj2828, poj2777, poj2886, poj2750):包括线段树、树状数组、Trie树等,用于解决复杂的数据查询和更新问题。 2. **平衡树**(如poj2482, poj2352):如AVL树、红黑树等,保持树...

    参加ACM大赛应该准备哪些课程? (2).pdf

    1. 线段树 2. 并查集 3. 动态规划的各个典型(LCS、最长递增子串、三角剖分、记忆化dp) 4. 博弈类算法(博弈树、二进制法) 5. 双向广度搜索、A*算法、最小耗散优先 6. 差分约束系统 7. Hash表 图论 1. 网络流...

    算法训练方案详解

    - **示例题目**: POJ 3267, POJ 1836, POJ 1260, POJ 2533, POJ 3176, POJ 1080, POJ 1159 - **注意事项**: 理解每种模型的状态定义和转移方程。 #### 六、数学 **1. 组合数学** - **定义**: 研究组合结构的...

    ACM训练方案

    4. 数据结构高级应用:线段树、静态二叉检索树、树状数组、RMQ和并查集的更复杂用法。 5. 搜索优化:最优化剪枝、搜索技巧和记忆化搜索。 这些内容构成了一个全面的ACM训练框架,旨在全面提升参赛者的编程思维、...

    ACM算法总结大全——超有用!.pdf

    4. **数据结构**:线段树、静态二叉检索树、树状数组、RMQ、并查集的高级应用和KMP算法。 5. **搜索**:最优化剪枝、搜索技巧和优化、记忆化搜索。 6. **动态规划**:处理更复杂的问题,如动态规划解施行商问题等...

    浙江大学ACM模板 计算几何,图论,数据结构,经典题的模板

    7.2 线段树 147 7.3 并查集 151 7.4 树状数组 152 7.5 点树 154 7.6 STL 156 7.7 离散化 157 8.图论 158 8.0 2-SAT 158 8.2 寻找Euler回路 163 8.3 拓扑排序 163 8.4 差分约束系统 164 8.5 笛卡尔树 165 8.6 LCA和...

Global site tag (gtag.js) - Google Analytics