神秘RE求助
查看原帖
神秘RE求助
366254
dxy2020楼主2022/5/8 20:38

rt,下载测试点后在本地测试没有RE,但答案错误,洛谷上测却显示RE,说我访问无效内存空间。

#include <bits/stdc++.h>
using namespace std;
int n,m,l,r,op,bl,k;
int id[100005];
int a[100005],tag[100005],s[100005];
inline void update (int l,int r){
	while (l%bl!=1&&l<=r){
		s[id[l]]-=(a[l]^tag[id[l]]);
		a[l]^=1;
		s[id[l]]+=(a[l]^tag[id[l]]);
		++l;
	}
	while (id[l]<id[r]){
		s[id[l]]=bl-s[id[l]];
		tag[id[l]]^=1;
		l+=bl;
	}
	while (l<=r){
		s[id[l]]-=(a[l]^tag[id[l]]);
		a[l]^=1;
		s[id[l]]+=(a[l]^tag[id[l]]);
		++l;
	}
}
inline int query (int l,int r){
	int sum=0;
	while (l%bl!=1&&l<=r){
		sum+=(a[l]^tag[id[l]]);
		++l;
	}
	while (id[l]<id[r]){
		sum+=s[id[l]];
		l+=bl;
	}
	while (l<=r){
		sum+=(a[l]^tag[id[l]]); 
		++l; 
	}
	return sum;
}
signed main(){
//	freopen ("Light Switching G.in","r",stdin);
//	freopen ("Light Switching G.out","w",stdout);
	scanf ("%d%d",&n,&m);
	bl=(int)(sqrt (n));
	for (int i=1;i<=n;++i){
		id[i]=(i-1)/bl+1;
	}
	for (int i=1;i<=m;++i){
		scanf ("%d%d%d",&op,&l,&r);
		if (op==0) update (l,r);
		if (op==1) printf ("%d\n",query(l,r));
	}
	return 0;
}
2022/5/8 20:38
加载中...