在swap操作中,为什么必须先删l小的?
void swp(int l,int r,int L,int R){
if(l>L) swap(l,L),swap(r,R);
auto itr=split(r+1),itl=split(l);
cnt=0;
for(auto it=itl;it!=itr;it++) siz[++cnt]=it->r-it->l+1,val[cnt]=it->v;
itr=split(R+1),itl=split(L);
Cnt=0;
for(auto it=itl;it!=itr;it++) Siz[++Cnt]=it->r-it->l+1,Val[Cnt]=it->v;
itr=split(R+1),itl=split(L);
s.erase(itl,itr);
itr=split(r+1),itl=split(l);
s.erase(itl,itr);
for(int i=1;i<=Cnt;i++){
s.insert(Chtholly(l,l+Siz[i]-1,Val[i]));
l+=Siz[i];
}
for(int i=1;i<=cnt;i++){
s.insert(Chtholly(L,L+siz[i]-1,val[i]));
L+=siz[i];
}
}
这个 swap 操作是错的。
但如果把第9,10行和第11,12行交换一下就对了。
为啥啊qwq