我是这样写的删除,但是出了问题,我好像没分析出来错误。
所以应该怎么写啊
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;
}
}