map/set 维护同色连续段板子

set

struct node{
	int l,r,x;
	bool operator <(const node&b)const{return l<b.l;}
};
set<node>s;
typedef set<node>::iterator iter;
iter split(int p){
	iter it=s.lower_bound((node){p,-1,0});
	if(it!=s.end() && it->l==p)return it;
	--it;
	int l=it->l,r=it->r,x=it->x;
	s.erase(it),s.insert((node){l,p-1,x});
	return s.insert((node){p,r,x}).fi;
}

map

map<int,int>mp;
typedef map<int,int>::iterator iter;
iter split(int p){
	auto it=mp.lower_bound(p);
	if(it!=mp.end() && it->fi==p)return it;
	--it,mp[p]=it->se;
	return mp.find(p);
}
void assign(int l,int r,ll v=0){
	auto itr=split(r+1),itl=split(l);
	mp.erase(itl,itr),mp[l]=v;
}
posted @ 2023-01-24 23:40  Rainbow_qwq  阅读(101)  评论(0)    收藏  举报