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;
}