求助,下载测试点后自测正确,交上去WA
  • 板块学术版
  • 楼主Push_Y
  • 当前回复6
  • 已保存回复6
  • 发布时间2020/7/19 21:53
  • 上次更新2023/11/6 22:48:09
查看原帖
求助,下载测试点后自测正确,交上去WA
135485
Push_Y楼主2020/7/19 21:53

P2574 XOR的艺术

这是我的代码,交上去全WA了,下载第一个测试点后,我的输出与答案一样,但是WA了,大佬们帮忙看一下呗

#include <bits/stdc++.h>
#define ls x<<1
#define rs x<<1|1
using namespace std;

inline int gin(){
	char c=getchar();
	int s=0,f=1;
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		s=(s<<3)+(s<<1)+(c^48);
		c=getchar();
	}
	return s*f;
}

int n,m,a[200001];
long long t[800005],sum[800005];

void pushup(int x){
	sum[x]=sum[ls]+sum[rs];
}

void build(int x,int l,int r){
	if(l==r){
		sum[x]=a[l];
		return;
	}
	int mid=l+r>>1;
	build(ls,l,mid);
	build(rs,mid+1,r);
	pushup(x);
}

void pushdown(int x,int len){
	if(t[x]){
		t[ls]^=1;
		t[rs]^=1;
		sum[ls]=(len-(len>>1))-sum[ls];
		sum[rs]=(len>>1)-sum[rs];
		t[x]=0;
	}
}

void change(int x,int l,int r,int L,int R){
	pushdown(x,r-l+1);
	if(l>=L && r<=R){
		t[x]^=1;
		sum[x]=r-l+1-sum[x];
		return;
	}
	int mid=l+r>>1;
	if(L<=mid)change(ls,l,mid,L,R);
	if(R>=mid+1)change(rs,mid+1,r,L,R);
	pushup(x);
}

long long query(int x,int l,int r,int L,int R){
	if(l>=L && r<=R){
		return sum[x];
	}
	pushdown(x,r-l+1);
	int mid=l+r>>1;
	long long ans=0;
	if(L<=mid)ans+=query(ls,l,mid,L,R);
	if(R>=mid+1)ans+=query(rs,mid+1,r,L,R);
	return ans;
}

int main(){
	n=gin(),m=gin();
	for(int i=1;i<=n;i++){
		int c=getchar();
		a[i]=c-'0';
	}
	build(1,1,n);
	while(m--){
		int op=gin(),l=gin(),r=gin();
		if(op==0){
			change(1,1,n,l,r);
		}
		else printf("%lld\n",query(1,1,n,l,r));
	}
	return 0;
}

2020/7/19 21:53
加载中...