ST暴力求调
查看原帖
ST暴力求调
469309
凤年楼主2023/3/1 22:03

rt,似乎ST写挂了,只有k = j 的时候st表才有数,别的时候都是0,求大佬给看看

#include <bits/stdc++.h>
#define N 250010
#define LL long long
#define ull unsigned long long
using namespace std;

int T, q, n;
int a[N], b[N];
ull maxa[N][20], maxb[N][20];

ull ans;

void work() {
    int t = log(n) / log(2) + 1;
    for(int j = 1;j < t; ++j)
        for(int i = 1;i + (1 << j) - 1 <= n; ++i) {
            maxa[i][j] = max(maxa[i][j - 1], maxa[i + (1 << (j - 1))][j - 1]);
            maxb[i][j] = max(maxb[i][j - 1], maxb[i + (1 << (j - 1))][j - 1]);
        }
}

void print() {
    int l = 1, r = 30;
    for(int j = l;j <= r; ++j)
            for(int k = j;k <= r; ++k) {
                int len = log2(k - j + 1);
                ull ma = max(maxa[j][len], maxa[k - (j << len) + 1][len]);
                ull mb = max(maxb[j][len], maxb[k - (j << len) + 1][len]);
                printf("ma = %d mb = %d\n", ma, mb);
            }
}

int main() {
    // freopen("C://Users//Administrator//AppData//Local//Temp//BNZ.63ff52262eca37e//match3.in", "r", stdin);
    scanf("%d %d", &T, &n);
    for(int i = 1;i <= n; ++i) scanf("%d", &a[i]), maxa[i][0] = a[i];
    for(int i = 1;i <= n; ++i) scanf("%d", &b[i]), maxb[i][0] = b[i];
    // print();
    scanf("%d", &q);
    for(int i = 1, l ,r ;i <= q; ++i) {
        ans = 0;
        scanf("%d %d", &l, &r);
        for(int j = l;j <= r; ++j)
            for(int k = j;k <= r; ++k) {
                // printf("%d %d:", j, k);
                int len = log2(k - j + 1);
                // printf("%d \n", len);
                ull ma = max(maxa[j][len], maxa[k - (1 << len) + 1][len]);
                ull mb = max(maxb[j][len], maxb[k - (1 << len) + 1][len]);
                // printf("ma = %d mb = %d\n", ma, mb);
                ans = ((ma * mb) + ans);
            }
        printf("%llu\n", ans);
    }
    return 0;
}
2023/3/1 22:03
加载中...