设为首页 加入收藏

TOP

数据结构_SBT(二)
2012-12-10 13:12:09 来源: 作者: 【 】 浏览:763
Tags:数据结构 _SBT

 

  void insert(int &t,int v) {

  if (t == 0)

  t = ++tot,a[t].Init(),a[t].key = v;

  else {

  a[t].size++;

  if (v < a[t].key)

  insert(a[t].left,v);

  else insert(a[t].right,v);

  maintain(t,v>=a[t].key);

  }

  }

  int del(int &t,int v) {

  if (!t) return 0;

  a[t].size--;

  if (v == a[t].key || v < a[t].key && !a[t].left

  || v > a[t].key && !a[t].right) {

  if (a[t].left && a[t].right) {

  int p = del(a[t].left,v+1);

  a[t].key = a[p].key;

  return p;

  }

  else {

  int p = t;

  t = a[t].left + a[t].right;

  return p;

  }

  }

  else return del(v<a[t].key a[t].left:a[t].right,v);

  }

  int find(int t,int k) {

  if (k <= a[a[t].left].size)

  return find(a[t].left,k);

  if (k > a[a[t].left].size + 1)

  return find(a[t].right,k-a[a[t].left].size-1);

  return a[t].key;

  }

  int main()

  {

  int i,j,k;

  while (scanf("%d%d",&n,&m) != EOF) {

  tot = root = 0;

  char ope ;

  while (n--) {

  scanf("%s",ope);

  if (ope[0] == 'I') {

  scanf("%d",&k);

  insert(root,k);

  }

  else printf("%d\n",find(root,a[root].size+1-m));

  }

  }

  }

      

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇由C++绝对值函数想到的 下一篇数据结构_单调队列

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: