hdu6098[RMQ+筛法] 2017多校6

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu6098[RMQ+筛法] 2017多校6相关的知识,希望对你有一定的参考价值。

/*hdu6098[RMQ+筛法] 2017多校6*/
#include <bits/stdc++.h>
using namespace std;
int T, n, st[100005][20], len[100005], a[100005];
void st_init() {
    len[0] = -1;
    for (int i = 1; i <= n; i++) {
        st[i][0] = a[i];
        len[i] = (i & (i - 1)) == 0 ? len[i - 1] + 1 : len[i - 1];
    }
    for (int j = 1; j <= len[n]; j++) {
        for (int i = 1; i + (1 << j) - 1 <= n; i++) {
            st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
        }
    }
}
int query(int l, int r) {
    int k = len[r - l + 1];
    return max(st[l][k], st[r - (1 << k) + 1][k]);
}
int main() {
    scanf("%d", &T);
    while (T--) {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) {
            scanf("%d", &a[i]);
        }
        st_init();
        for (int i = 2; i <= n; i++) {
            int ans = 0;
            for (int j = 0; j < n; j += i) {
                //cout<<"["<<j+1<<", "<<min(n, j + i - 1)<<"]\n";
                ans = max(query(j + 1, min(n, j + i - 1)), ans);
            }
            if(i>2) printf(" ");
            printf("%d", ans);
        }
        puts("");
    }
    return 0;
}

 

以上是关于hdu6098[RMQ+筛法] 2017多校6的主要内容,如果未能解决你的问题,请参考以下文章

2015 HDU 多校联赛 5317 RGCDQ 筛法求解

HDU 5289 Assignment(多校2015 RMQ 单调(双端)队列)

hdu6103[尺取法] 2017多校6

杭电2018多校第一场(2018 Multi-University Training Contest 1) 1008.RMQ Similar Sequence (HDU6305) -笛卡尔树+数学期望

2017多校第6场 HDU 6105 Gameia 博弈

2017多校第6场 HDU 6096 String AC自动机