RMQ:离线算法,求序列中一段区间的最值;
//最大值用max 最小值用min
void advan(int n)
{
for(int i=1;i<=n;i++)
f[i][0]=a[i];
for(int i=1;(1<<i)<=n;i++)
{
for(int j=1;j+(1<<i)-1<=n;j++)
f[j][i]=min(f[j][i-1],f[j+(1<<(i-1))][i-1]);
}
}
int query(int l,int r)
{
int k=0;
k=log2(double(r-l+1));
return min(f[l][k],f[r-(1<<k)+1][k]);
}