ST表0pts 3WA 9TLE求助
查看原帖
ST表0pts 3WA 9TLE求助
320697
AMIRIOX無暝楼主2021/2/7 21:37

好像没啥问题啊...我已经垃圾到模板题都写不对的程度了吗

#include <cstdio>
#include <iostream>
using namespace std;
const int maxn = 1e6 + 10;
int logs[maxn], f[maxn][21];
int n, m, logn = 21;
inline int read() {
    int val = 0, flg = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')
            flg = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        val = (val << 1) + (val << 3) + ch ^ 48;
        ch = getchar();
    }
    return val * flg;
}
void logo() {
    logs[1] = 0;
    logs[2] = 1;
    for (int i = 3; i <= maxn; i++) {
        logs[i] = logs[i / 2] + 1;
    }
}
int main() {
    // scanf("%d %d", &n, &m);
    n = read();
    m = read();
    for (int i = 1; i <= n; i++) {
        // scanf("%d", &f[i][0]);
        f[i][0] = read();
    }
    logo();
    /*
    结论:F[x][k] = max F[x,k-1],F[x+2^(k-1),k-1]

    证 关于k-1:
        RMQ a[i][2^j-1] = max Ra(i, i+2^(j-1)-1), Ra(i+2(j-1), i+2^j-1)
        F[i][j] = a[i,i+2^j-1]

        f_2[k-1] of F[x+2^(k-1),k-1] = a_2[x+2^(k-1)+2^(k-1)-1] = a_2[x+2^k-1]
        F[i+2^(j-1),j-1]  = RMQ a[i+2^(j-1), i+2^(j-1)+2^(j-1)-1)]
        = RMQ a(i+2^(j-1), i+2^j-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++) {
        int L, R;
        // scanf("%d %d", &L, &R);
        L=read(); R=read();
        int s = logs[R - L + 1];
        printf("%d\n", max(f[L][s], f[R - (1 << s) + 1][s]));
    }
    return 0;
}
2021/2/7 21:37
加载中...