主席树部分模版

const int maxn=1e5+100;

int tol=0,rt[maxn*60],lson[maxn*60],rson[maxn*60],lz[maxn*60];
ll v[maxn*60];

void push_up(int x){
	v[x]=max(v[lson[x]],v[rson[x]]);
}

void push_down(int x,int len){
	if(lz[x]){
		v[lson[x]]+=(len>>1)*lz[x];
		v[rson[x]]+=(len-(len>>1))*lz[x];
		lz[lson[x]]=lz[x];
		lz[rson[x]]=lz[x];
		lz[x]=0;
	}
}

void build(int &x,int l,int r){
	x=++tol;
	//cout<<x<<" "<<l<<' '<<r<<endl;
	if(l==r){
		v[x]=1e15;
		return ;
	}
	int mid=(l+r)>>1;
	build(lson[x],l,mid);
	build(rson[x],mid+1,r);
	push_up(x);
}

void update(int pos,int l,int r,int &x,int la,ll val){
	
	x=++tol;
	lson[x]=lson[la],rson[x]=rson[la],v[x]=v[la];
	if(l==r){
		v[x]=min(v[x],val);
		return ;
	}
	//push_down()
	int mid=(l+r)>>1;
	if(pos<=mid) update(pos,l,mid,lson[x],lson[la],val);
	else update(pos,mid+1,r,rson[x],rson[la],val);
	push_up(x);
}

ll query(int L,int R,int l,int r,int x){

	if(L<=l&&R>=r){
		return v[x];
	}
	//push_down();
	int mid=(l+r)>>1;
	if(R<=mid) {
		return query(L,R,l,mid,lson[x]);
	}
	else if(L>mid){
		 return query(L,R,mid+1,r,rson[x]);
	}
	return max(query(L,R,l,mid,lson[x]),query(L,R,mid+1,r,rson[x]));
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值