zoukankan      html  css  js  c++  java
  • bzoj3224 普通平衡树(c++vector)

    Tyvj 1728 普通平衡树

    Description

    您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:
    1. 插入x数
    2. 删除x数(若有多个相同的数,因只删除一个)
    3. 查询x数的排名(若有多个相同的数,因输出最小的排名)
    4. 查询排名为x的数
    5. 求x的前驱(前驱定义为小于x,且最大的数)
    6. 求x的后继(后继定义为大于x,且最小的数)

    Input

    第一行为n,表示操作的个数,下面n行每行有两个数opt和x,opt表示操作的序号(1<=opt<=6)

    Output

    对于操作3,4,5,6每行输出一个数,表示对应答案

    Sample Input

    10
    1 106465
    4 1
    1 317721
    1 460929
    1 644985
    1 84185
    1 89851
    6 81968
    1 492737
    5 493598

    Sample Output

    106465
    84185
    492737
    这道题裸的vector stl的题目,维护有序,不然会出错的。
    怎么维护有序呢,用insert每次插入,使之有序。
     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<cmath>
     6 #include<vector>
     7 
     8 using namespace std;
     9 
    10 int n;
    11 vector<int>q;
    12 
    13 void insert(int x)//用这个来保证有序。 
    14 {
    15     q.insert(upper_bound(q.begin(),q.end(),x),x);
    16     return;
    17 }
    18 void del(int x)
    19 {
    20     q.erase(lower_bound(q.begin(),q.end(),x));
    21     return;
    22 }
    23 int find(int x)
    24 {
    25     return lower_bound(q.begin(),q.end(),x)-q.begin()+1;
    26 }
    27 int main()
    28 {
    29     scanf("%d",&n);
    30     q.reserve(200000);
    31     for (int i=1;i<=n;i++)
    32     {
    33         int k,x;
    34         scanf("%d%d",&k,&x);
    35         switch(k)
    36         {
    37             case 1:insert(x);break;
    38             case 2:del(x);break;
    39             case 3:printf("%d
    ",find(x));break;
    40             case 4:printf("%d
    ",q[x-1]);break;
    41             case 5:printf("%d
    ",*(lower_bound(q.begin(),q.end(),x)-1));break;
    42             case 6:printf("%d
    ",*upper_bound(q.begin(),q.end(),x));
    43         }
    44     }
    45 }
  • 相关阅读:
    [HIS] HIT行业常用名词及缩写定义
    String Split 和 Join
    深入解析字符串的比较方法:“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。
    Oracle安装时先决条件检查失败的解决方案
    C#创建XML文件并保存
    关于SQL Server 数据库的备份
    为Windows 7添加“Internet打印”功能
    C#如何使用和开发自定义配置节
    C#中配置文件的使用
    键盘KeyCode值列表
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/7502318.html
Copyright © 2011-2022 走看看