本题珂朵莉树常见错误
  • 板块P5350 序列
  • 楼主NASFsky
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/8 19:22
  • 上次更新2023/11/8 20:53:25
查看原帖
本题珂朵莉树常见错误
375403
NASFsky楼主2023/11/8 19:22

注意 split 顺序和 iterator 的时效问题。
比如比较烦的 swap 操作(交换两段),你应该这么写:

void swp(ll l1,ll r1,ll l2,ll r2)
{
	g1.clear();g2.clear();
	if(l1>l2)swap(l1,l2),swap(r1,r2);
	si itr1=split(r1+1),itl1=split(l1);//1
	for(si it=itl1;it!=itr1;it++)g1.push_back(node(it->l,it->r,it->val));
	s.erase(itl1,itr1);//2
	si itr2=split(r2+1),itl2=split(l2);//3
	for(si it=itl2;it!=itr2;it++)g2.push_back(node(it->l,it->r,it->val));
	s.erase(itl2,itr2);//4
	for(node t:g2)s.insert(node(l1+t.l-l2,l1+t.r-l2,t.val));
	for(node t:g1)s.insert(node(l2+t.l-l1,l2+t.r-l1,t.val));
}

44 就一定不能在 22 之前写,会导致你原先的 iterator 出现问题,从而找不到正确的地址。
其他设计多个区间的操作也是同理。
(都是血与泪的教训啊……)

2023/11/8 19:22
加载中...