萌新不是刚学OI,不是妹子,模板写挂,求助
查看原帖
萌新不是刚学OI,不是妹子,模板写挂,求助
403680
Torry_Q楼主2020/10/10 18:15
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;int n,m;
int num[N],f[N][33],lg[N];
inline int read()
{
    int f=1,ans=0;char ch;
    while(!isdigit(ch)){if(ch=='-') f=-1; ch=getchar();}
    while(isdigit(ch)) {ans=ans*10+(ch^48);ch=getchar();}
    return f*ans;
}
void init()
{
    for(int i=1;i<=n;i++)
    {
        f[i][0]=num[i];
    }
    for(int j=1;j<=lg[n]-1;j++)
        for(int i=1;i<=n;i++)
            f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int solve(int l,int r)
{
    return max(f[l][lg[r-l+1]-1],f[r-(1<<(lg[r-l+1]-1))+1][lg[r-l+1]-1]);
}
int main()
{
    n=read();m=read();
    for(int i=1;i<=n;i++)
    {
        num[i]=read();
    }
    for(int i=1;i<=n;i++)
    {
        lg[i]=lg[i-1]+((1<<lg[i-1])==i);
    }
    init();
    for(int i=1;i<=m;i++)
    {
        int x,y;
        x=read(),y=read();
        cout<<solve(x,y)<<endl;
    }
    return 0;
}
2020/10/10 18:15
加载中...