https://vjudge.net/contest/238207#problem/E
前缀数组后缀数组
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5;
int a[N+10],ands[N+10],ande[N+10],ors[N+10],ore[N+10];
int main (void)
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
int i,xo;
ands[0]=ande[m+1]=0;
ands[0]=~ands[0];
ande[m+1]=~ande[m+1];
ors[0]=ore[n+1]=0;
xo=0;
for(i=1;i<=m;i++)
{
scanf("%d",&a[i]);
ands[i]=ands[i-1]&a[i];
ors[i]=ors[i-1]|a[i];
xo^=a[i];
}
for(i=m;i>=1;i--)
{
ande[i]=ande[i+1]&a[i];
ore[i]=ore[i+1]|a[i];
}
int va;
for(i=1;i<=n;i++)
{
scanf("%d",&va);
printf("%d %d %d\n",ands[va-1]&ande[va+1],ors[va-1]|ore[va+1],xo^a[va]);
}
}
return 0;
}