题意:随机访问任意区间的极值;
ST算法:DP预处理复杂度O(nlogn);以后每次询问复杂度为O(1);
(F[i,j]表示从i位置开始,往右2^j个元素中的极值。
动规方程F[i,j]=max(F[i,j-1],F[i+2^(j-1),j-1]),
当
i+2^(j-1)大于序列左端时,则
F[i,j]=
(F[i,j-1];
在访问(a,b)区间时,取j使得2^j刚好小于等于(b-a);然后求得max(
F[i,j],F[b-2^j+1,j])即可;
#include <iostream>
#include <stdio.h>
using namespace std;
int maxtool[50010][20];
int mintool[50010][20];
int rem[50010];
int pow(int k)
{
}
int finds(int k)
{
}
int main()
{
}