RMQ(ST算法)模板

用F[ i ][ j ]表示从 i 开始 1<

递推方程是显然的。

由于最值有重叠求值不影响的特点,所以询问[i,j]的答案是max( f [ i ] [ k ] , f [ j - ( 1 << k ) + 1 ] [ k ] ),其中k = log ( j - i + 1 ) / log ( 2 )。

代码如下:

#include
#include
#include
using namespace std;
int f[10000][20];
int main()
{
	int n,q;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>f[i][0];
	for(int j=1;(1<>q;
	while(q--)
	{
		int i,j,k;
		cin>>i>>j;
		k=log(j-i+1)/log(2);
		cout<


你可能感兴趣的:(学习笔记)