牛客小白月赛8 F-数列操作 (有序表)
链接:https://www.nowcoder.com/acm/contest/214/F
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
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输入数据可能很多,推荐使用快读
好像是个平衡树的板子题
但是平衡树还没写过啊....
刚开始想用multiset实现
但是mutilset的树结构关系 迭代器只重载了自加自减
无法随机查询
洗衣服的时候突然想到LIS的有序表插入
这道题用有序表加vector的各种操作应该可以实现
结果交了一发竟然过了
时间复杂度:
随机查询O(1)
按值查询O(log2n) //lower/upper_bound()
后插O(1) //arr.push_back()
中间插入平均O(n/2) //arr.insert(vector<int>::iterator it, val);
时间复杂度尚可接受
代码↓
//#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <sstream>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;const int MAXN = 1e6 + 10;std::vector <int> arr;int main()
{//ios::sync_with_stdio(false);//cin.tie(0); cout.tie(0);//freopen("D://test.in", "r", stdin);//freopen("D://test.out", "w", stdout);int n, a, b;scanf("%d", &n);vector <int>::iterator it;while(n--){ scanf("%d%d", &a, &b);if(a == 1){it = lower_bound(arr.begin(), arr.end(), b);arr.insert(it, b);}else if(a == 2){it = lower_bound(arr.begin(), arr.end(), b);arr.erase(it);}else if(a == 3){ it = lower_bound(arr.begin(), arr.end(), b);printf("%d\n", it - arr.begin() + 1); }else if(a == 4){printf("%d\n", arr[b - 1]);}else if(a == 5){it = lower_bound(arr.begin(), arr.end(), b);it--;printf("%d\n", *it);}else if(a == 6){it = upper_bound(arr.begin(), arr.end(), b);printf("%d\n", *it);}}return 0;
}
牛客小白月赛8 F-数列操作 (有序表)相关推荐
- 牛客小白月赛61 F.选座椅(双指针)
牛客小白月赛61 F.选座椅(双指针) 显然 ( l , r ) (l,r) (l,r)满足 ( l , r + 1 ) (l,r+1) (l,r+1)满足. 那么可以考虑双指针,枚举 l l l,然 ...
- 牛客小白月赛2 F.黑黑白白
牛客小白月赛2 F.黑黑白白 题目链接 题目描述 艮为山,动静得宜,适可而止:兑为泽,刚内柔外,上下相和. 艮卦:兼山,艮:君子以思不出其位.财帛常打心头走,可惜眼前难到手,不如意时且忍耐,逢着闲事休 ...
- 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)
链接:https://ac.nowcoder.com/acm/contest/392/F 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 牛客小白月赛9: F. 暴力出奇迹(思维题)
链接:https://ac.nowcoder.com/acm/contest/275/F 来源:牛客网 题目描述 给定一个序列,寻找一对l,r,满足1 ≤ l ≤ r ≤ n 最大化的值 其中表示将a ...
- 牛客小白月赛17 F小黄鸭(计算几何+积分+二分)
链接:https://ac.nowcoder.com/acm/contest/1085/F 来源:牛客网 题目描述 小sun的寝室有一只小黄鸭,小黄鸭浮在水面上的样子特别可爱,现在小sun有一个问题: ...
- 牛客小白月赛17 F小黄鸭(计算几何+积分+二分)
题目链接:https://ac.nowcoder.com/acm/contest/1085/F 题解: 根据,,可得① 球的正视图是个圆心为(0,r),半径为r的圆,方程为② 侵入水中的体积: 体积公 ...
- F.孤独(牛客小白月赛39)
F.孤独(牛客小白月赛39) 题意: 给定一棵树,寻找一个路径,将断掉所有与这个路径上的点相连的边,使得剩下的最大连通块的大小最小 题解: 这题有点印象,感觉做过,至少这个方法肯定遇到过 设dp[u] ...
- 牛客小白月赛3 C.博弈
牛客小白月赛3 C.博弈 题目链接 题目描述 XHRlyb 在和 Cwbc 玩游戏. 在一个多重集合中有在 [l,r] 中的全部整数各一个,即 l,l+1,l+2,......,rl,l+1,l+2, ...
- 牛客小白月赛65个人题解A-E
1. 牛客小白月赛65 A. 牛牛去购物 题意:给定n元,购买价格为a元的篮球和价格为b的篮球,数量不定,要使得花掉的钱最多,也就是剩余的钱数最少,求这个值 (1 <= n, a, b < ...
最新文章
- Day 49 Nginx
- Python标准库:内置函数dict(mapping, **kwarg)
- Oracle编程入门经典 第7章 表
- boost安装_编译安装Mysql详细步骤
- 性能测试之性能测试的基础理论
- linux上安装hackrf_在Linux上安装Kubectl
- LeetCode 662 二叉树最大宽度
- unity3d 鼠标延各个方向拖拽物体
- 日志级别_SpringBoot实战(十三):Admin动态修改日志级别
- Linux2.6内核本地提权
- 将Tomcat集成到eclipse中并写出第一条web语句
- AVRNET 学习笔记UDP部分
- ztree 修改样式_zTree样式修改
- 计算机代数与数论pdf,基础数论算法 - maTHμ - 计算机代数系统.pdf
- IT行业常见职位英语缩写及中文释义
- google code jam 2008 Mousetrap (逆向)
- Zynga旗下魔法三消手机游戏《Harry Potter: Puzzles Spells》邀请玩家一起参加最新推出的游戏内系列活动——俱乐部挑战赛
- EBS创建会计科目请求报错问题查询
- CSS+SVG实现简单的点赞效果
- SpringJpa @query 中根据传入参数(字段)排序