build以后分数-10,wa声一片
查看原帖
build以后分数-10,wa声一片
138106
tgs9311楼主2021/4/10 22:57

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

2021/4/10 22:57
加载中...