我为啥错了?
2026-03-10 21:51:08
发布于:广东
我这题为啥错了呀?
我不是骗人的,希望大家能帮我看看。
题目编号:A85304
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N ((1<<17)+5)
ll diff[N];
int fc[N<<1],tc[N<<1];
int a[N];
int n,m,Tc;
char tmp[N];
int D[N];
int A[N],c[N];
int K;
void dfs1(int x,int h){
if(!h){
fc[x]=a[x-(1<<K)+1];
tc[x]=x-(1<<K)+1;
return;
}
dfs1(x<<1,h-1);
dfs1(x<<1|1,h-1);
if(!D[x] && fc[x<<1]>=h)tc[x]=tc[x<<1];
else tc[x]=tc[x<<1|1];
fc[x]=fc[x<<1|(D[x]^(fc[(x<<1)|D[x]]<h))];
}
void dfs2(int x,int hi,int h,int L,int R){
if(L>R)return;
if(!h){
int v=x-(1<<K)+1;
if(L<min(R,v))diff[L]+=v,diff[min(R,v)]-=v;
if(a[v]>=hi && max(v,L)<R)diff[max(v,L)]+=v,diff[R]-=v;
return;
}
if(!D[x]){
dfs2(x<<1,max(hi,h),h-1,L,R);
dfs2(x<<1|1,hi,h-1,L,fc[x<<1]>=h?min(R,tc[x<<1]):R);
}
else{
dfs2(x<<1,hi,h-1,L,fc[x<<1|1]>=h?min(R,tc[x<<1|1]):R);
dfs2(x<<1|1,max(hi,h),h-1,L,R);
}
}
int main(){
// freopen("arena.in","r",stdin);
// freopen("arena.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&A[i]);
for(int i=1;i<=m;i++)scanf("%d",&c[i]);
K=__lg(n-1)+1;
for(int d=K-1;d>=0;d--){
scanf("%s",tmp);
for(int i=0;i<=(1<<d);i++)D[i+(1<<d)]=tmp[i]-'0';
}
scanf("%d",&Tc);
while(Tc--){
int X[4];
scanf("%d%d%d%d",&X[0],&X[1],&X[2],&X[3]);
for(int i=1;i<=n;i++)a[i]=A[i]^X[i&3];
dfs1(1,K);
for(int i=0;i<=n;i++)diff[i]=0;
for(int d=0;d<=K;d++)dfs2(1<<(K-d),0,d,d==0?1:(1<<(d-1))+1,(1<<d)+1);
for(int i=1;i<=n;i++)diff[i]+=diff[i-1];
ll ans=0;
for(int i=1;i<=m;i++)ans^=i*diff[c[i]];
printf("%lld\n",ans);
}
return 0;
}
希望大家能认真看完,帮我指出错误,谢谢!
全部评论 4
拜谢
6天前 来自 广东
1你能看出来吗?
6天前 来自 广东
1
一定要帮我指出错误
6天前 来自 广东
1求求你们了!!!
6天前 来自 广东
11
6天前 来自 广东
1
























有帮助,赞一个