题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289
题意:求满足最大值减最小值小于k的区间的数目。
代码:#include
#include
#include
#include
#include
#include
#include...
分类:
编程语言 时间:
2015-07-22 14:43:30
阅读次数:
120
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289
题面:
Assignment
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 672 Accepted Su...
分类:
其他好文 时间:
2015-07-22 13:16:45
阅读次数:
90
区间最值询问是求给定区间最值的问题。若总区间为[1,N],通常是有多次查询,每次查询是不同的总区间的子区间。简单的方法是对每个子区间遍历从而找到最值,时间复杂度是O(N),但是如果有多次的查询,效率就会很低。而解决这个问题的一个很好的在线算法便是ST(Sparse_Table)算法算法思想预处理ST算法在O(nlogn)的预处理以后可以实现O(1)的查询效率。也就是说我们把大量的区间的最值预先求出来...
分类:
其他好文 时间:
2015-07-15 17:03:08
阅读次数:
131
/*RMQ(Range Minimum/Maximum Query)问题: RMQ问题是求给定区间中的最值问题。当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的算法效率不够。可以用线段树将算法优化到O(logn)(在线段树中保存线段的最值)。不过,Spars.....
分类:
编程语言 时间:
2015-06-18 18:49:08
阅读次数:
120
为了在运行中避免可能出现的危险,即当string emuStack为空,emuStack.begin()和emuStack.end()是什么。采取的策略是先将emuStack重置为非空,再进行其他操作,这样就永远不可能碰到底部。
#include
#include
using namespace std;
class Solution {
public:
bool isValid(st...
分类:
其他好文 时间:
2015-06-06 09:18:14
阅读次数:
108
RMQ是一类解决区间最值查询的算法的通称;、一共有四类;在代码中有说明;下面是ST算法,就是动态规划做法;来看一下ST算法是怎么实现的(以最大值为例):首先是预处理,用一个DP解决。设a是要求区间最值的数列,f[i,j]表示从第i个数起连续2^j个数中的最大值。例如数列3 2 4 5 6 8 1 2...
分类:
其他好文 时间:
2015-05-31 01:20:22
阅读次数:
130
ACG++826ms146MB思路: 按照提示一的方法进行实现。使用二进制的思想,只需要找到从第i个开始的2^j个数中的最小。i=(1,n)而因为n上限为100万,100万的二进制(1111 01000010 01000000),那么j 最大不超过20。按最坏情况算,只需要计算n*20个结果就行了....
分类:
编程语言 时间:
2015-05-15 19:17:57
阅读次数:
194
题目描述 这次是使用在线算法解决这个问题。 两个节点的最近公共祖先就是这两个节点的通路上深度最浅的那个节点。 可以通过一遍深搜把树转成数组:每次经过一个节点(无论是从父节点进入还是从子节点返回)时,把它放入数组。同时要记录每个节点在数组中最后一次出现的位置。 使用RMQ-ST算法预先计算2^k长度区...
分类:
其他好文 时间:
2015-05-09 23:18:38
阅读次数:
162
问题描述 问题就是询问区间内的最小值。 数据量n, 查询量q。 朴素的算法复杂度O(nq)。 为减少冗余计算,预先计算出每个位置起 2^k 长度范围内的最小值。 data[i][j]表示从 i 起的 2^k 个元素的最小值。 递推式 data[i][j] = min{data[i][j – 1], ...
分类:
编程语言 时间:
2015-05-08 23:33:49
阅读次数:
157
分析:
1、贪心,对数组进行扫描,如果a[i]>a[i+1]则把a[i]删除,直到删除m个为止;如果扫描一遍后删除的数不够m个,则在把数组末尾的数删除,直到总的删够m个,数组中剩下的数从头到尾即为结果。
2、RMQ算法解决,假设数组的长度为len,要删除的数的个数为m,那么最终数组中将剩下len-m个,因此可以找出数组中第一个到第m+1个的最小数作为最终结果的第一位,并假设最小数下标为i,再找...
分类:
编程语言 时间:
2015-05-04 13:51:02
阅读次数:
182