struct Node { int l,r; mutable int v; Node(const int& il,const int& ir,const int& iv):l(il),r(ir),v(iv){}; bool operator<(const Node &t)const{return l<t.l;} }; set<Node> odt; auto split(int x){ auto it=odt.lower_bound(Node(x,0,0)); if(it!=odt.end()&&it->l==x)return it;--it; int l=it->l,r=it->r,v=it->v; odt.erase(it); odt.insert(Node(l,x-1,v)); return odt.insert(Node(x,r,v)).first; } void assign(int l,int r,int v){ auto itr=split(r+1),itl=split(l); odt.erase(itl,itr); odt.insert(Node(l,r,v)); } void perform(int l,int r){ auto itr=split(r+1),itl=split(l); for(;itl!=itr;++itl){ int l=itl->l,r=itl->r,v=itl->v; } }
|