感受
思路
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 5e3 + 10;
ll f[maxn][maxn];
ll dp[maxn][maxn];
ll a[maxn];
int n;
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%lld", &a[i]);
dp[i][i] = f[i][i] = a[i];
}
for(int len = 2; len <= n; len++){
for(int l = 1, r;; l++){
r = l+ len - 1; if(r > n) break;
dp[l][r] = f[l][r] = f[l][r - 1] ^ f[l + 1][r];
dp[l][r] = max(dp[l][r], dp[l][r - 1]);
dp[l][r] = max(dp[l][r], dp[l + 1][r]);
}
}
int q, l, r;
scanf("%d", &q);
while(q--){
scanf("%d%d", &l, &r);
printf("%lld\n", dp[l][r]);
}
return 0;
}



京公网安备 11010502036488号