RMQ

来源:互联网 发布:烧烤火锅一体锅 知乎 编辑:程序博客网 时间:2024/06/02 06:17
#include<iostream>#include<cstdio>#define MAXN 100005using namespace std;int n,m;long long a[MAXN],d[MAXN][18];inline int read (){    int n=0;    char ch=getchar();    while(ch<'0'||ch>'9') ch=getchar();    while(ch>='0'&&ch<='9')     {        n=n*10+ch-'0';        ch=getchar();    }    return n;}inline void RMQ_pre(){    for(int i=1;i<=n;i++)    {        d[i][0]=read();    }    for(int j=1;(1<<j)<=n;j++)//(1<<j)<=n     for(int i=1;i+(1<<j)-1<=n;i++)//i+(1<<j)-1<=n      d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);} inline int RMQ(int l,int r){    int k=0;    while((1<<k)<=r-l+1) k++;    k--;    return max(d[l][k],d[r-(1<<k)+1][k]);}int main(){  n=read();  m=read();  RMQ_pre();  for(int i=1;i<=m;i++)  {    int l=read(),r=read();    printf("%d\n",RMQ(l,r));  }  return 0;}
原创粉丝点击