求调,RE#2
查看原帖
求调,RE#2
767861
Melo_BBB楼主2023/9/13 21:31

RT,似乎是执行op1的时候出的。

#include<bits/stdc++.h>
using namespace std;
const int INF=INT_MAX;
struct node{
	node(int l=0,int r=0,int v=0,int fm=0,int nm=0,int sm=0,int la=0,int k=0):l(l),r(r),v(v),fm(fm),nm(nm),sm(sm),la(la){
		memset(b,k,sizeof(b));
	}
	int l,r,v,fm,nm,sm,la,b[50];
}f[400010];
int n,q,b[50],a[200010];
void chg(node&k,int x,int y){
	for(int i=0;i<30;i++)
		k.b[i]+=((y>>i&1)-(x>>i&1))*k.nm;
	return;
}
void pd(node&k,int la){
	if(k.fm>=la)
		return;
	chg(k,k.fm,la);
	if(k.nm&1)
		k.v^=k.fm^la;
	k.fm=k.la=la;
	return;
}
void pd(int x){
	if(f[x].la==-1)
		return;
	pd(f[x<<1],f[x].la),pd(f[x<<1|1],f[x].la);
	f[x].la=-1;
	return;
}
void pu(int x){
	f[x].v=f[x<<1].v^f[x<<1|1].v;
	for(int i=0;i<30;i++)
		f[x].b[i]=f[x<<1].b[i]+f[x<<1|1].b[i];
	if(f[x<<1].fm==f[x<<1|1].fm)
		f[x].fm=f[x<<1].fm,f[x].nm=f[x<<1].nm+f[x<<1|1].nm,f[x].sm=min(f[x<<1].sm,f[x<<1|1].sm);
	else{
		bool k=f[x<<1|1].fm<f[x<<1].fm;
		f[x].fm=f[x<<1|k].fm,f[x].nm=f[x<<1|k].nm,f[x].sm=min(f[x<<1|k].sm,f[x<<1|(k^1)].fm);
	}
	return;
}
void bld(int l,int r,int x=1){
	f[x]=node(l,r,a[l],a[l],1,INF,-1);
	if(l==r){
		chg(f[x],0,a[l]);
		return;
	}
	int mid=l+r>>1;
	return bld(l,mid,x<<1),bld(mid+1,r,x<<1|1),pu(x);
}
void mdf(int l,int r,int c,int x=1){
	if(f[x].fm>=c)
		return;
	if(l<=f[x].l&&f[x].r<=r&&c<=f[x].sm)
		return pd(f[x],c);
	pd(x);
	int mid=f[x].l+f[x].r>>1;
	if(l<=mid)
		mdf(l,r,c,x<<1);
	if(mid<r)
		mdf(l,r,c,x<<1|1);
	return pu(x);
}
int qry(int l,int r,int x=1){
	if(l<=f[x].l&&f[x].r<=r){
		for(int i=0;i<30;i++)
			b[i]+=f[x].b[i];
		return f[x].v;
	}
	pd(x);
	int ret=0,mid=f[x].l+f[x].r>>1;
	if(l<=mid)
		ret^=qry(l,r,x<<1);
	if(mid<r)
		ret^=qry(l,r,x<<1|1);
	return ret;
}
int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	bld(1,n);
	for(int op,l,r,x;q--;){
		cin>>op>>l>>r>>x;
		if(op==1){
			mdf(l,r,x);
			continue;
		}
		memset(b,0,sizeof(b));
		int xs=qry(l,r)^x;
		if(!xs){
			cout<<"0\n";
			continue;
		}
		int t=log2(xs);
		cout<<b[t]+((x>>t)&1)<<'\n';
	}
	return 0;
}
2023/9/13 21:31
加载中...