• 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 }
  • 相关阅读:
    Python之协程
    Python之线程 3
    js和jsp之间相互传值
    毕业设计记录
    毕业设计记录16
    mysql select一张表的字段数据insert写入另一张表,同时传入自定义数据
    MySQL防止重复插入相同记录
    毕业设计记录
    解决python mysql插入int型数据报错:TypeError: %d format: a number is required, not str
    毕业设计记录
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/7502318.html
Copyright © 2020-2023  润新知