社区讨论

蒟蒻求救珂朵莉树

P5350序列参与者 2已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m153uh5h
此快照首次捕获于
2024/09/16 22:33
去年
此快照最后确认于
2025/11/04 21:04
4 个月前
查看原帖
本题中的 swap 操作在下面这种写法下为什么一定要先对靠前的区间先操作啊
CPP
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});
}
虽然有前人提到过这个问题,但是好像都没有给出详细的解释可能是蒟蒻太菜了看不懂吧

回复

5 条回复,欢迎继续交流。

正在加载回复...