本题中的 swap 操作在下面这种写法下为什么一定要先对靠前的区间先操作啊
void swap(int l1,int r1,int l2,int r2){
if(l1>l2)swap(l1,l2),swap(r1,r2);
vector<nd>res1,res2;
auto itr1=split(r1+1),itl1=split(l1);
for(auto it=itl1;it!=itr1;it++)res1.pb(*it);
ct.erase(itl1,itr1);
auto itr2=split(r2+1),itl2=split(l2);
for(auto it=itl2;it!=itr2;it++)res2.pb(*it);
ct.erase(itl2,itr2);
for(auto i:res1)ct.insert({i.l-l1+l2,i.r-l1+l2,i.v});
for(auto i:res2)ct.insert({i.l-l2+l1,i.r-l2+l1,i.v});
}
虽然有前人提到过这个问题,但是好像都没有给出详细的解释可能是蒟蒻太菜了看不懂吧