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;
}