一直TLE啊,用了快读
查看原帖
一直TLE啊,用了快读
1309286
Red_Maple_楼主2024/5/1 20:24
#include <cstdio>
#include <iostream>
#include <stdio.h>

using namespace std;
int n, m;
const int MAXN = 100005;
const int logN = 18;
int f[MAXN][logN];
int Log[MAXN];
int l, r;
// This is a fast I/O template
inline int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9')
    {
        if(ch == '-')
        {
            f = -1;
        }
    }
    while(ch >= '0' && ch <= '9')
    {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}


int main()
{
    n = read();
    m = read();
    for(int i = 1; i <= n; i++)
    {
        f[i][0] = read();
    }
    Log[1] = 0;
    Log[2] = 1;
    for(int i = 3; i <= n; i++)
    {
        Log[i] = Log[i / 2] + 1;
    }

    for(int j = 1; j <= logN; 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; i <= m; i++) {
        l = read();
        r = read();
        int s = Log[r - l + 1];
        printf("%d\n", max(f[l][s], f[r - (1 << s) + 1][s]));
    }

    return 0;
}
2024/5/1 20:24
加载中...