Talk about the ST table

The ST table, as far as I know (Konjac), is a great tool for solving the RMQ problem (interval maximum and minimum).

This thing uses the idea of ​​multiplication.

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=1e6+10;
inline int read()
{
    char c=getchar();int x=0,f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
int f[MAXN][21];
int Query(int l,int r)
{
    int k=log2(r-l+1);
    return max(f[l][k],f[r-(1<<k)+1][k]);
}
intmain ()
{
    int N=read(),M=read();
    for(int i=1;i<=N;++i)f[i][0]=read();
    for(int j=1;j<=21;++j)    
        for(int i=1;i+(1<<j)-1<=N;i++)
            f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
    for(int i=1,l,r;i<=M;++i)
    {
        l=read();r=read();
        printf("%d\n",Query(l,r));
    }
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325235919&siteId=291194637