zoukankan      html  css  js  c++  java
  • 用vector实现普通平衡树 By cellur925

    其实我真的很想学习手写平衡树的==。但是感觉联赛前真没有时间了(太菜了。),于是先学一个STL代用苟,如果还能继续在(tsoi)苟,回来一定先学平衡树=w=。

    然后因为窝对STL用的不是特别好,有的地方说的可能不太准确..还请各位dalao斧正(qwq)

    维护信息:

    您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:

    1. 插入x数
    2. 删除x数(若有多个相同的数,因只删除一个)
    3. 查询x数的排名(若有多个相同的数,因输出最小的排名)
    4. 查询排名为x的数
    5. 求x的前驱(前驱定义为小于x,且最大的数)
    6. 求x的后继(后继定义为大于x,且最小的数)

    vector的几个新鲜操作

    平时一般用的都是(pushback)(empty)(clear),下标随机访问等通俗操作,今天介绍一些新的。

    (insert):这东西不仅在(set)中有,(vector)其实也是有的,而且非常资瓷,能在指定位置插入制定元素,一般用法是(v.insert)(位置,元素)。这里的位置用的是迭代器,也就是说用
    (lowerbound)类似的操作时不用减去(v).(begin())

    (erase):删除制定位置的数,位置也是迭代器。
    一般用法:(v.erase)(位置)。

    星号解除引用:与(set)操作类似。

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    int n;
    vector<int>v;
    
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		int op=0,x=0;
    		scanf("%d%d",&op,&x);
    		if(op==1) v.insert(upper_bound(v.begin(),v.end(),x),x);
    		else if(op==2) v.erase(lower_bound(v.begin(),v.end(),x));
    		else if(op==3) printf("%d
    ",lower_bound(v.begin(),v.end(),x)-v.begin()+1);
    		else if(op==4) printf("%d
    ",v[x-1]);
    		else if(op==5) printf("%d
    ",*--lower_bound(v.begin(),v.end(),x));
    		else if(op==6) printf("%d
    ",*upper_bound(v.begin(),v.end(),x));
    	}
    	return 0;
    }
    

    **不过这玩意NOIP不到真正要用的时候千万别用 毕竟要是越界的就凉凉了!! **

  • 相关阅读:
    利用国内的源安装 Python第三方库
    Python 算法(1) 快速排序
    Python 算法(2) 哈夫曼编码 Huffman Encoding
    Python sql注入 过滤字符串的非法字符
    tesseract中文语言文件包 下载
    python 多线程爬虫 实例
    Python 爬虫实例(5)—— 爬取爱奇艺视频电视剧的链接(2017-06-30 10:37)
    Django的ORM中如何判断查询结果是否为空,判断django中的orm为空
    Python 爬虫实例(4)—— 爬取网易新闻
    NLTK在自然语言处理
  • 原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9872660.html
Copyright © 2011-2022 走看看