分块,TLE 11,求调
查看原帖
分块,TLE 11,求调
1256453
zzuxx楼主2024/7/10 19:17
#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll n, m, jdg, l, r, markk[10000000], op[10000000], len, a[10000000];
inline 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;
}
int main(){
	n=read(), m=read();
	len=sqrt(n);
	for(ll i = 1; i <= n; i++){
		op[i] = (i-1)/len+1;
	}
	for(ll i = 1; i <= m; i++){
		jdg=read(), l=read(), r=read();
		if(jdg == 0){
			for(ll i = l; i <= min(r, len*op[l]); i++){
				a[i] ^= 1;
			}
			if(op[l] != op[r])
				for(ll i = (op[r]-1)*len+1; i <= r; i++)
					a[i] ^= 1;
			for(ll i = op[l]+1; i <= op[r]-1; i++)
				markk[i] ^= 1;
		}
		else{
			ll ans=0;
			for(ll i = l; i <= r; i++){
				if((a[i]+markk[op[i]])%2 == 1)
					ans++;
			}
			printf("%lld\n", ans);
		}
	}
	
	return 0;
}
2024/7/10 19:17
加载中...