为啥能MLE
查看原帖
为啥能MLE
376347
住在隔壁小莘楼主2022/2/4 23:17
#include<iostream>
using namespace std;
const int maxn=1e6;
long long n,m;
long long v[4*maxn],lazy[4*maxn];
void update(long long k){
	v[k]=v[k<<1]+v[k<<1|1];
}
void spread_lazy(long long l,long long r,long long k){
	if(lazy[k]){
		long long mid=(l+r)>>1;
		lazy[k<<1]+=lazy[k];
		lazy[k<<1|1]+=lazy[k];
		v[k<<1]=(mid-l+1)-v[k<<1];
		v[k<<1|1]=(r-mid)-v[k<<1|1];
		lazy[k]=0;
	}
}
void change(long long l,long long r,long long nowl,long long nowr,long long k){
	if(l<=nowl&&r>=nowr){
		v[k]=(nowr-nowl+1)-v[k];
		lazy[k]+=1;
		return;
	}
	long long mid=(nowl,nowr)>>1;
	if(l<=mid){
		change(l,r,nowl,mid,k<<1);
	}
	if(r>mid){
		change(l,r,mid+1,nowr,k<<1|1);
	}
	update(k);
}
long long get_out(long long l,long long r,long long nowl,long long nowr,long long k){
	if(l<=nowl&&r>=nowr){
		return v[k];
	}
	long long mid=(nowl+nowr)>>1;
	spread_lazy(nowl,nowr,k);
	long long ans=0;
	if(l<=mid){
		ans+=get_out(l,r,nowl,mid,k<<1);
	}
	if(r>mid){
		ans+=get_out(l,r,mid+1,nowr,k<<1|1); 
	}
	return ans;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int s,x,y;
		cin>>s>>x>>y;
		if(s==0){
			change(x,y,1,n,1);
		}else{
			cout<<get_out(x,y,1,n,1)<<endl;
		}
	}
}
2022/2/4 23:17
加载中...