萌新袜子求助,为什么本地和洛谷评测不一样啊qwq
  • 板块P2574 XOR的艺术
  • 楼主Arteg
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/11/10 18:44
  • 上次更新2023/11/10 20:53:16
查看原帖
萌新袜子求助,为什么本地和洛谷评测不一样啊qwq
1015770
Arteg楼主2023/11/10 18:44
#include<bits/stdc++.h>
using namespace std;
#define int long long

int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	return x*f;
}

void write(int x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9)
		write(x/10);
	putchar(x%10+'0');
	return ;
}

int n,m,t,l[1010],r[1010],sum[1010],cha[1010],to[200020];
string s;
bool c[200020];

signed main(){
	//freopen("xor.in","r",stdin);
	//freopen("xor.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		char a;
		cin>>a;
		c[i]=a-'0';
	}
	t=sqrt(n);
	for(int i=1;i<=t;i++){
		l[i]=(i-1)*t+1;
		r[i]=i*t;
	}
	if(r[t]<n){
		l[++t]=r[t-1]+1;
		r[t]=n;
	}
	for(int i=1;i<=t;i++){
		for(int j=l[i];j<=r[i];j++){
			to[j]=i;
			sum[i]+=c[j];		
		}
	}
	while(m--){
		int op,ll,rr;
		cin>>op>>ll>>rr;
		if(op==0){
			if(to[ll]==to[rr])
				for(int i=ll;i<=rr;i++){
					if(c[i]){
						c[i]=0;
						sum[to[ll]]--;
					}
					else{
						c[i]=1;
						sum[to[ll]]++;
					}
				}
			else{
				for(int i=ll;i<=r[to[ll]];i++){
					if(c[i]){
						c[i]=0;
						sum[to[ll]]--;
					}
					else{
						c[i]=1;
						sum[to[ll]]++;
					}
				}
				for(int i=l[to[rr]];i<=rr;i++){
					if(c[i]){
						c[i]=0;
						sum[to[rr]]--;
					}
					else{
						c[i]=1;
						sum[to[rr]]++;
					}
				}
				for(int i=to[ll]+1;i<=to[rr]-1;i++)
					cha[i]^=1;
			}
		}
		else{
			int ans=0;
			if(to[ll]==to[rr])
				for(int i=ll;i<=rr;i++)
					ans+=(c[i]^cha[to[ll]]);
			else{
				for(int i=ll;i<=r[to[ll]];i++)
					ans+=(c[i]^cha[to[ll]]);
				for(int i=l[to[rr]];i<=rr;i++)
					ans+=(c[i]^cha[to[rr]]);
				for(int i=to[ll]+1;i<=to[rr]-1;i++){
					if(cha[i])
						ans+=r[i]-l[i]+1-sum[i];
					else
						ans+=sum[i];
				}
			}
			cout<<ans<<endl;
		}
	}
	return 0;
}
2023/11/10 18:44
加载中...