简单递推。
设f[i]表示f[1]^f[2]^...^f[n]
所以对于1<=l,r<=n的数据,ans=f[l-1]^f[r]
对于l,r>=n的数据,我们找规律知:ans=f[(l-1)%n]^f[r%n];
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll num[100001];
ll num_xor[100001];
ll n;
ll k;
int main(){
int k;
scanf("%lld",&k);
for (ll i=1;i<=k;i++)
scanf("%lld",&num[i]),num_xor[i]=num_xor[i-1]^num[i];
ll q;
ll l,r;
ll n=k+1;
scanf("%lld",&q);
num_xor[n]=0;
for (ll i=1;i<=q;i++){
scanf("%lld%lld",&l,&r);
ll ans=num_xor[(l-1)%n]^num_xor[r%n];
printf("%lld\n",ans);
}
}