关于块状链表的删除操作
查看原帖
关于块状链表的删除操作
482610
Mortidesperatslav楼主2024/4/13 12:51

我是这样写的删除,但是出了问题,我好像没分析出来错误。

所以应该怎么写啊

void del(int l, int r){
	int qz = 0, pre = 0;
	for (int v = 0; v != -1; v = lis[v].nxt){
		int kr = qz + lis[v].siz;
		if (kr < l){
			pre = v;
			qz += lis[v].siz;
			continue;
		}
		if (qz > r)
			break;
	//	cout << v << " " << kr << " " << lis[v].nxt << "\n"; 
	//	system("pause");
		if (qz >= l && kr <= r)
			bdel(v, pre);
		else{
			if (qz < l && kr > r){
				spt(v, l - 1 - qz);
				spt(lis[v].nxt, r - qz);
				bdel(lis[v].nxt, v);
			}else if (qz < l){
				spt(v, l - 1 - qz);
				bdel(lis[v].nxt, v);
			}else{
				spt(v, r - qz);
				bdel(v, pre);
			}
			if (pre != 0 && lis[pre].siz < lis[lis[v].nxt].siz)
				if (lis[v].siz + lis[pre].siz < sqn)
					mg(pre, v);
			else if (lis[v].nxt != -1)
				if (lis[v].siz + lis[lis[v].nxt].siz < sqn)
					mg(v, lis[v].nxt);
		}
		pre = v;
		qz += lis[v].siz;
	}
}
2024/4/13 12:51
加载中...