谁能解释一下为什么厌氧MLE
查看原帖
谁能解释一下为什么厌氧MLE
734103
_ICX楼主2024/7/14 11:20

RT 关了O2就过了

#include<bits/stdc++.h>
using namespace std;
const int N=4e5+10;
int n,m,t[N],lazy[N];
int pushup(int k){
	t[k]=t[k<<1]+t[k<<1|1];
}
void build(int k,int l,int r){
	if(l==r){
		t[k]=0;
		return ;
	}
	int mid=l+r>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	pushup(k);
}
void change(int k,int l,int r){
	lazy[k]^=1;
	t[k]=(r-l+1)-t[k];
}
void pushdown(int k,int l,int r){
	if(lazy[k]){
		int mid=l+r>>1;
		change(k<<1,l,mid);
		change(k<<1|1,mid+1,r);
		lazy[k]=0;
	}
}
void update(int k,int l,int r,int x,int y){
	if(x<=l&&r<=y){
		change(k,l,r);
		return;
	}
	pushdown(k,l,r);
	int mid=l+r>>1;
	if(x<=mid)update(k<<1,l,mid,x,y);
	if(y>mid)update(k<<1|1,mid+1,r,x,y);
	pushup(k);
}
int query(int k,int l,int r,int x,int y){
	if(x<=l&&r<=y){
		return t[k];
	}
	pushdown(k,l,r);
	int mid=l+r>>1;
	int res=0;
	if(x<=mid)res+=query(k<<1,l,mid,x,y);
	if(y>mid)res+=query(k<<1|1,mid+1,r,x,y);
	return res;
}
int main(){
	scanf("%d%d",&n,&m);
	int c,a,b;
	build(1,1,n);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&c,&a,&b);
		if(c==0)update(1,1,n,a,b);
		else if(c==1)printf("%d\n",query(1,1,n,a,b));
	}
	return 0;
}
2024/7/14 11:20
加载中...