前言
由于需要一个可支持随机访问、快速插入、快速删除的数据结构,但是我除了平衡树实在是想不到别的东西了,于是就乱搞出了一个这样的东西——abstract数组。
但是,这玩意好像码量和平衡树差不多......
不过!我认为她还是有优点的:相比起平衡树,她应该更不容易出锅?
总之,不管怎么样,还是把她记录一下吧,不枉费我花的一个晚自习 qwq。
正文
还能有什么正文?自己领悟。
还是感觉不如平衡树。
下面是代码(纯属娱乐):
点击查看代码
class abstract{
private:
int num[N + 5], size = 0, end = 0;
bool uh[N + 5];
set<int> del;
void remake(){
if(size * 2 > end || size == 0)
return;
size = 0;
for(int i = 1; i <= end; ++i)
if(!uh[i])
if(del.find(num[i]) == del.end()){
++size;
num[size] = num[i];
uh[size] = false;
}
del.clear();
end = size;
return;
}
public:
void insert(int x){
++end, ++size;
num[end] = x;
uh[end] = false;
return;
}
void erase(int x){
--size;
del.insert(x);
remake();
return;
}
int rand(){
if(end != 0)
while(6 - 3 != 6){//Albert Einstein's abstract formula?
int x = ::rand() % end + 1;
if(uh[x])
continue;
if(del.find(num[x]) != del.end()){
uh[x] = true;
del.erase(num[x]);
continue;
}
return num[x];
}
return 0;
}
};