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;
}