摘要: 题意:给你一个序列,之后又Q次询问,每次都是询问一个区间内最大值与最小值的差分析:RMQ,求区间最值RMQ(Range Minimum/Maximum Query)问题: RMQ问题是求给定区间中的最值问题。当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的算法效率不够。可以用线段树将算法优化到O(logn)(在线段树中保存线段的最值)。不过,Sparse_Table算法才是最好的:它可以在O(nlogn)的预处理以后实现O(1)的查询效率。下面把Sparse Table算法分成预处理和查询两部分来说明(以求最小值为例)。 预处理: 预处理使用DP的思想.. 阅读全文
posted @ 2012-02-16 20:37 枕边梦 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个数字串,求最小的分段数m(每段个数按数字窜顺序切割,余数丢弃)求各个段中的最大值之和超过k的最小m是多少分析:先求出m的上界和下界,二分枚举m 之后就是一个区间求最值的问题了,还不会RMQ,只能用线段树求了线段树版#include<iostream>#include<algorithm>#include<queue>#define MAXN 200000+10using namespace std;struct node{ int l,r,maxn;}p[MAXN<<2];int a[MAXN],n;void bulid(int s 阅读全文
posted @ 2012-02-16 16:51 枕边梦 阅读(617) 评论(0) 推荐(0) 编辑