RMQ、LCA
ramay7
Life is not short,but float.
展开
-
POJ 3264 Balanced Lineup(RMQ)
题目链接: POJ 3264 Balanced Lineup 题意: 输出Q次查询区间的最小值和最大值之差。 分析: RMQ的应用。//8416K 3579MS #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int MAX_N=500原创 2016-04-04 18:42:35 · 302 阅读 · 0 评论 -
POJ 3368 Frequent values(线段树/RMQ)
题目链接: POJ 3368 Frequent values 题意: 给一串非降序数字序列,然后有Q个查询,每次查询区间[a,b]内的最大连续相同数字长度,数组下标从1开始。 如数字序列为:-1 -1 1 2 2 2 ,区间[1,3]内的最大连续相同数字长度为2,而区间[3,6]内的答案为3. 分析: ①用线段树存储树中区间的最大连续相同区间长度。在建树和查询区间被左右儿子“瓜分”的时候原创 2016-04-04 21:06:17 · 623 阅读 · 0 评论 -
HDU 3486 Interviewe(RMQ)
题目链接: HDU 3486 Interviewe 题意: 要求从nn个人中,选择最少的人使得这些人的权值大于limitlimit,选择的人必须是连续的长度相同的区间中选择的,而且最后的不够区间长度的剩余人数舍弃。例如在7个人中选择2个人,在[1,3]和[4,6][1,3]和[4,6]各选1个人,然后第七个人舍弃。 数据范围:n≤20000n\leq 20000 分析: RMQ.原创 2016-08-11 11:19:59 · 474 阅读 · 0 评论 -
POJ 1330 Nearest Common Ancestors(LCA,在线处理三种方式)
题目链接: POJ 1330 Nearest Common Ancestors 题意: 给一个nn点和n−1n-1条边的树,第nn行是要查询的两个节点的最近公共祖先,输出要查询的最近公共祖先。 数据范围:n≤104n\leq 10^{4} 分析: 可以学习《挑战程序设计竞赛》P328−P331P_{328}-P_{331}暴力求解记节点vv到根的深度为depth[v]depth[原创 2016-08-13 00:33:48 · 449 阅读 · 0 评论 -
POJ 1470 Cloest Common Ancestor(用Tarjan查询LCA)
题目链接; POJ 1470 Cloest Common Ancestor 题意: 给一个nn个节点,n−1n-1条边的树,有多组查询两个节点的最近公共最先,按编号从小到大输出至少作为一次查询的最近公共祖先的节点编号和相应的次数。 数据范围:n≤900n\leq 900 分析: TarjanTarjan离线处理。当然使用基于RMQRMQ的在线处理方式也应该可以 。 算法原创 2016-08-13 11:07:58 · 445 阅读 · 0 评论 -
POJ 1986 Distance Queries(查询两点距离,LCA)
题目链接: POJ 1986 Distance Queries 题意: 给一个连通的nn个节点的树,有QQ次查询,每次输出两点间距离。 数据范围:n≤40000n\leq 40000 分析: 先用基于RMQ算法的求LCA的方法求出LCA。记dis[i]dis[i]为根节点到ii节点的距离,那么uu和vv之间的距离就是: Ans=dis[u]+dis[v]−2∗dis[LCA(原创 2016-08-13 13:35:01 · 732 阅读 · 0 评论 -
HDU 2586 How far away?(LCA)
题目链接; HDU 2586 How far away? 题意: 和POJ 1986 Distance Queries一样的,包括数据范围。 分析: 这里建单向边就能过了。。。#include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> using namespace std; typede原创 2016-08-13 14:12:46 · 390 阅读 · 0 评论