没build 20,build了只有 10
求救为什么其他点全wa了
代码:
#include<bits/stdc++.h>
using namespace std;
namespace FAST_IO
{
template<typename T> void read(T &a)
{
a=0;
int f=1;
char c=getchar();
while(!isdigit(c))
{
if(c=='-')
{
f=-1;
}
c=getchar();
}
while(isdigit(c))
{
a=a*10+c-'0';
c=getchar();
}
a=a*f;
}
template <typename T> void write(T a)
{
if(a<0)
{
a=-a;
putchar('-');
}
if(a>9)
{
write(a/10);
}
putchar(a%10+'0');
}
template <typename T> void writeln(T a)
{
write(a);
puts("");
}
}
const int maxn=2e5+999;
int belong[maxn],l[maxn],r[maxn],num,_size;
int n,a[maxn],add[maxn],lazy[maxn],m;
void build()
{
_size=sqrt(n);
num=n/_size;
if(n%_size)
{
num++;
}
for(int i=1;i<=num;i++)
{
l[i]=(i-1)*_size+1;
r[i]=i*_size;
}
r[num]=n;
for(int i=1;i<=n;i++)
{
belong[i]=i/_size;
if(i%_size)
{
belong[i]++;
}
}
}
void update(int ls,int rs)
{
int x=belong[ls],y=belong[rs];
if(x==y)
{
for(int i=ls;i<=rs;i++)
{
a[i]=!a[i];
if((a[i]&&(!lazy[x]))||((!a[i])&&lazy[x]))
{
add[x]++;
}
else
{
add[x]--;
}
}
}
else
{
for(int i=ls;i<=r[x];i++)
{
a[i]=!a[i];
if((a[i]&&(!lazy[x]))||((!a[i])&&lazy[x]))
{
add[x]++;
}
else
{
add[x]--;
}
}
for(int i=x+1;i<=y-1;i++)
{
lazy[i]=!lazy[i];
add[i]=(r[i]-l[i]-add[i]);
}
for(int i=l[y];i<=rs;i++)
{
a[i]=!a[i];
if((a[i]&&(!lazy[y]))||((!a[i])&&lazy[y]))
{
add[y]++;
}
else
{
add[y]--;
}
}
}
}
int ask(int ls,int rs)
{
int ans=0;
int x=belong[ls],y=belong[rs];
if(x==y)
{
for(int i=ls;i<=rs;i++)
{
if((a[i]&&(!lazy[x]))||((!a[i])&&lazy[x]))
{
ans++;
}
}
}
else
{
for(int i=ls;i<=r[x];i++)
{
if((a[i]&&(!lazy[x]))||((!a[i])&&lazy[x]))
{
ans++;
}
}
for(int i=x+1;i<=y-1;i++)
{
ans+=add[i];
}
for(int i=l[y];i<=rs;i++)
{
if((a[i]&&(!lazy[y]))||((!a[i])&&lazy[y]))
{
ans++;
}
}
}
return ans;
}
signed main()
{
FAST_IO::read(n);
FAST_IO::read(m);
build();
while(m--)
{
int c,a,b;
FAST_IO::read(c);
FAST_IO::read(a);
FAST_IO::read(b);
if(!c)
{
update(a,b);
}
else
{
FAST_IO::writeln(ask(a,b));
}
}
}