链接:https://www.nowcoder.com/acm/contest/214/F
来源:牛客网

题目描述

clccle是个蒟蒻,她经常会在学校机房里刷题,也会被同校的dalao们虐,有一次,她想出了一个毒瘤数据结构,便兴冲冲的把题面打了出来,她觉得自己能5s内切掉就很棒了,结果evildoer过来一看,说:"这思博题不是1s就能切掉嘛",clccle觉得自己的信心得到了打击,你能帮她在1s中切掉这道水题嘛?

你需要写一个毒瘤(划掉)简单的数据结构,满足以下操作
1.插入一个数x(insert)
2.删除一个数x(delete)(如果有多个相同的数,则只删除一个)
3.查询一个数x的排名(若有多个相同的数,就输出最小的排名)
4.查询排名为x的数
5.求一个数x的前驱
6.求一个数x的后继

输入描述:

第一行,输入一个整数n,表示接下来需要输入n行接下来n行,输入 一个整数num和一个整数x

输出描述:

当num为3,4,5,6时,输出对应的答案

示例1

输入

复制

8
1 10
1 20
1 30
3 20
4 2
2 10
5 25
6 -1

输出

复制

2
20
20
20

说明

大家自己手玩样例算了QWQ

备注:

对于全部数据n<=1e5,且3,4,5,6的操作数少于60000输入数据可能很多,推荐使用快读

补充知识:相关知识点

代码一:

#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>v;
int main()
{int n;scanf("%d",&n);while(n--){int a,b;scanf("%d %d",&a,&b);switch(a){case 1:v.insert(lower_bound(v.begin(),v.end(),b),b);break;case 2:v.erase(lower_bound(v.begin(),v.end(),b));break;case 3:printf("%d\n",((lower_bound(v.begin(),v.end(),b))-v.begin()+1));break;case 4:printf("%d\n",v[b-1]);break;case 5:printf("%d\n",v[lower_bound(v.begin(),v.end(),b)-v.begin()-1]);break;case 6:printf("%d\n",v[upper_bound(v.begin(),v.end(),b)-v.begin()]);break;}}return 0;
}

代码二 大佬的代码,可以当题解https://www.nowcoder.com/acm/contest/view-submission?submissionId=36539930

#include<vector>
#include<iostream>
#include<algorithm>
#include<cstdio>
#define ll long long
using namespace std;
vector<int>v;
int main()
{int n,a,x;scanf("%d",&n);while(n--){scanf("%d %d",&a,&x);if(a==1) v.insert(lower_bound(v.begin(),v.end(),x),x);//可实现从小到大的插入//lower_bound(begin(),end(),x) 在区间内查找大于等于x的第一个位置,返回它//如果所有都比x小则返回最后的位置if(a==2) v.erase(lower_bound(v.begin(),v.end(),x));//在容器中删除某个指定的数字x,由于删除方法中参数是迭代器,所以利用lower_boundif(a==3) printf("%d\n",lower_bound(v.begin(),v.end(),x)-v.begin()+1);//查找某个数字的排名 lower_bound返回的是那个数字的位置(迭代器),减去第一个位置,则为下标,+1则为排名if(a==4) printf("%d\n",v[x-1]);if(a==5) printf("%d\n",v[lower_bound(v.begin(),v.end(),x)-v.begin()-1]);if(a==6) printf("%d\n",*(upper_bound(v.begin(),v.end(),x)));//upper_bound(v.begin(),v.end(),x)返回在区间中第一个大于x的位置(仅大于)//if(a==6) printf("%d\n",*(lower_bound(v.begin(),v.end(),x)));}return 0;
}

代码三 房大佬队友的思路和代码

#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<iomanip>
#include<list>
#include<map>
#include<queue>
#include<sstream>
#include<stack>
#include<string>
#include<set>
#include<vector>
using namespace std;
#define PI acos(-1.0)
#define EPS 1e-8
#define MOD 1e9+7
#define LL long long
#define ULL unsigned long long     //1844674407370955161
#define INT_INF 0x7f7f7f7f      //2139062143
#define LL_INF 0x7f7f7f7f7f7f7f7f //9187201950435737471
const int dr[]={0, 0, -1, 1, -1, -1, 1, 1};
const int dc[]={-1, 1, 0, 0, -1, 1, -1, 1};
// ios::sync_with_stdio(false);
// 那么cin, 就不能跟C的 scanf,sscanf, getchar, fgets之类的一起使用了。
int main()
{int n;scanf("%d",&n);vector <int > q;while(n--){int x,y;scanf("%d%d",&x,&y);switch(x){case 1:{int ans=q.size();for(int i=0;i<q.size();++i)if(q[i]>=y){ans=i;break;}q.insert(q.begin()+ans,y);break;}case 2:q.erase(find(q.begin(),q.end(),y));break;case 3:for(int i=0;i<q.size();++i)if(q[i]==y){printf("%d\n",i+1);break;}break;case 4:printf("%d\n",q[y-1]);break;case 5:for(int i=q.size()-1;i>=0;--i)if(q[i]<y){printf("%d\n",q[i]);break;}break;case 6:for(int i=0;i<q.size();++i)if(q[i]>y){printf("%d\n",q[i]);break;}break;}}//for(int i=0;i<q.size();++i)//cout<<q[i]<<" ";}

数列的操作 div2相关推荐

  1. 贪心算法-数列极差问题(对前篇文章的修改)

    package com.work.home_3_1; import java.util.Arrays; /**  * 贪心算法-数列极差问题  * 1. 问题描述:  *         N个正数数列 ...

  2. Fibonacci数列的实现与改进

    Fibonacci数列是初学者接触到的一道关于for循环的习题,它的实现比较简单 int main() {int pos = 0;cout << "Please enter a ...

  3. 线性结构 —— 分块算法 —— 分块九讲

    模型1:区间加法,单点询问 问题:给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值. 对每个块设置一个加法标记,记录这个块中元素一共加了多少,每次操作对整块直接 O(1) 标记, ...

  4. [leetcode]Next Greater Element

    第一题:寻找子集合中每个元素在原集合中右边第一个比它大的数. 想到了用哈希表存这个数的位置,但是没有想到可以直接用哈希表存next great,用栈存还没找到的数,没遍历一个数就考察栈中的元素小,小的 ...

  5. 2019年清华计算机系本校保研推免机考题目

    时间: 4小时3道题目 形式: 在线OJ测试,每题100分,分为多个子任务分别执行程序记分 操作系统:ubuntu 语言:C / C++ / java / python3 霄之国的列车 简而言之,霄之 ...

  6. [Codeforces Round #668 (Div. 2)]1405

    文章目录 A - Permutation Forgery B - Array Cancellation C - Balanced Bitstring [思维] D - Tree Tag [博弈][df ...

  7. hdu 3234 Exclusive-OR 题解(并查集,思维)

    该死的期末复习终于结束了... 暑假来了\color{#ff0000}{暑假来了}暑假来了!!! 所以我就珂以非常开心的写博客了. 原题链接: hdu 题意简述 多组数据.你有一个没有确定的数列.有一 ...

  8. 【前缀和与差分】- PAT题目

    前缀和与差分 1.前缀和: 前缀和是一种预处理,即给出n个数和m组访问,如果直接每次都在这些数列上操作,会造成超时,前缀和直接对这些访问进行预处理,最后直接得出取出结果进行计算.即O(n+m). 相关 ...

  9. CUDA实现FFT并行计算

    前言   本文是个人学习心得的分享,希望大家在阅读文章后能在评论中一起学习交流!另外还可以访问我的HelloCUDA仓库查看我在学习CUDA中写的一些demo程序. 内容概要 复数的CUDA C++实 ...

最新文章

  1. jackson反序列化时忽略不需要的字段
  2. linux中第一个进程的形成,Linux进程管理
  3. Linux查找大文件 (find的用法)
  4. 4.Java 面试题整理(JSP 篇)
  5. linux入门生信,优秀学员的学习方法展示
  6. VIIRS SDR数据预处理(一)
  7. 无线网卡mac地址修改
  8. DCMM GBT 36073-2018 数据管理能力成熟度评估模型(Word版)
  9. 二叉树遍历之先序遍历算法(非递归、递归)入门详解
  10. 【日常折腾】Y7000P拆机-更换触控板
  11. 给大家推荐几本最优秀的编程书
  12. SQL SERVER数据库日常使用总结
  13. 东芝移动硬盘计算机不显示,东芝移动硬盘无法识别电脑不显示盘符维修数据恢复...
  14. 艺龙的执着与固执:等待微信
  15. Maxwell 16.0 (64-bit) 软件卸载_Win7系统
  16. ibator mysql 分页,ZUI分页器的使用案例(ECLIPSE SMS项目)
  17. sugon服务器型号从哪看,sugon服务器初始密码
  18. 微信公众平台开发-access_token获取及应用(含源码)
  19. python发送put请求
  20. 无法将为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型

热门文章

  1. java饲养员喂动物案例,封装、继承、多态、接口
  2. uva1471 Defense Lines
  3. 关于wap上网及彩信的一点想法
  4. 计算机输入法无法启动,win7电脑开机没有输入法怎么办?
  5. 计算机命令提示符开热点,win7命令行架设无线热点(AP)
  6. 运用OpenCV对图像进行红眼校正
  7. 我的世界java萌新须知_我的世界新手入门攻略 萌新前期注意事项
  8. 关于数据驱动消费金融业务的几点看法
  9. vue 快速入门、常用指令(1)
  10. 世上万事,不过是一懒二拖三不读书