標籤:space 表示 str algorithm for ++ scanf \n code
設\(xorx[l][r]\)表示題目中\(f(l,r)\)的值,則可以得出
\[xorx[i][j]=xorx[i][j-1] \oplus xorx[i+1][j]\]
設\(maxx[l][r]\)表示區間\(\left [ l,r\right]\)內\(f(l,r)\)的最大值
\[maxx[l][r]=max(xorx[l][r],max(maxx[l][r-1],maxx[l+1][r]))\]
即可
#include <cstdio>#include <algorithm>#include <cstring>using namespace std;int n,xorx[5010][5010],maxx[5010][5010],q;int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&xorx[i][i]),maxx[i][i]=xorx[i][i]; for(int l=2;l<=n;l++) for(int i=1;i<=n-l+1;i++) maxx[i][i+l-1]=xorx[i][i+l-1]=xorx[i][i+l-2]^xorx[i+1][i+l-1]; for(int l=2;l<=n;l++) for(int i=1;i<=n-l+1;i++) maxx[i][i+l-1]=max(maxx[i][i+l-2],max(maxx[i+1][i+l-1],maxx[i][i+l-1])); scanf("%d",&q); for(int i=1;i<=q;i++){ int l,r; scanf("%d %d",&l,&r); printf("%d\n",maxx[l][r]); } // for(int l=1;l<=n;l++) // for(int i=1;i<=n-l+1;i++) // printf("[%d,%d] = %d\n",i,i+l-1,xorx[i][i+l-1]); return 0;}
CF983B XOR-pyramid