2019.9.5 天才的记忆

题目传送门

又是板子……

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define int long long
using namespace std;
int n,m,dp[400050][55],a[400050];
void init()
{
    for(int i=1;i<=n;i++)dp[i][0]=a[i];
    for(int j=1;(1<<j)<=n;j++)
        for(int i=1;i+(1<<j)-1<=n;i++)
            dp[i][j]=max(dp[i][j-1],dp[i+(1<<j-1)][j-1]);
}
int maxnum(int l,int r)
{
    int k=log2(r-l+1);
    return max(dp[l][k],dp[r-(1<<k)+1][k]);
}
signed main()
{
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
    init();
    scanf("%lld",&m);
    int x,y;
    for(int i=1;i<=m;i++)
    {
        scanf("%lld%lld",&x,&y);
        printf("%lld\n",maxnum(x,y));
    }
    return 0;
}

 

posted @ 2019-09-05 18:25  lqxssf  阅读(253)  评论(0编辑  收藏  举报