关于本题的 ODT 做法
  • 板块P5350 序列
  • 楼主Aesyl
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/8/24 11:25
  • 上次更新2024/8/22 15:08:08
查看原帖
关于本题的 ODT 做法
1062944
Aesyl楼主2023/8/24 11:25

在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

2023/8/24 11:25
加载中...