晚上调代码时写对拍程序之——为了不手写平衡树而乱搞的可支持随机访问、快速插入、快速删除的数据结构之—— abstract数组

前言

由于需要一个可支持随机访问、快速插入、快速删除的数据结构,但是我除了平衡树实在是想不到别的东西了,于是就乱搞出了一个这样的东西——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;
  }
};
posted @ 2024-02-19 15:02  静观默察  阅读(36)  评论(0)    收藏  举报