用vector实现普通平衡树 By cellur925
其实我真的很想学习手写平衡树的==。但是感觉联赛前真没有时间了(太菜了。),于是先学一个STL代用苟,如果还能继续在\(tsoi\)苟,回来一定先学平衡树=w=。
然后因为窝对STL用的不是特别好,有的地方说的可能不太准确..还请各位dalao斧正\(qwq\)
维护信息:
您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:
- 插入x数
- 删除x数(若有多个相同的数,因只删除一个)
- 查询x数的排名(若有多个相同的数,因输出最小的排名)
- 查询排名为x的数
- 求x的前驱(前驱定义为小于x,且最大的数)
- 求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\n",lower_bound(v.begin(),v.end(),x)-v.begin()+1);
else if(op==4) printf("%d\n",v[x-1]);
else if(op==5) printf("%d\n",*--lower_bound(v.begin(),v.end(),x));
else if(op==6) printf("%d\n",*upper_bound(v.begin(),v.end(),x));
}
return 0;
}
**不过这玩意NOIP不到真正要用的时候千万别用 毕竟要是越界的就凉凉了!! **
用vector实现普通平衡树 By cellur925的更多相关文章
- 「LuoguP3369」 【模板】普通平衡树 (用vector乱搞平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入 x 数 删除 x 数(若有多个相同的数,应只删除一个) 查询 x 数的排名(排名定义为比当前 ...
- vector妙用轻松水过平衡树???
极短代码预警 今天听身边的神仙说,可以用vector来写平衡树,代码极短. 然后去网上搜了一下,看到了attack dalao的这篇文章. 蒟蒻表示ssfd 赶紧膜拜了一波,并发表了一篇博客表示纪念. ...
- 洛谷P2286 [HNOI2004]宠物收养所 [STL,平衡树]
题目传送门 宠物收养所 题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的 ...
- NOIp知识集合 By cellur925
基本算法 快速幂 ll ksm(ll a,ll b) { ll ans=; while(b) { ) ans=ans*a%p; b>>=; a=a*a%p; } return ans; } ...
- 我学到的treap
到目前为止,平衡树应该是我学过的数据结构里面最难的一个了.(顺便贴上一个我认为treap讲解的比较好的博客https://blog.csdn.net/u014634338/article/detail ...
- BZOJ 3224: Tyvj 1728 普通平衡树 vector
3224: Tyvj 1728 普通平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除 ...
- bzoj3224 普通平衡树(c++vector)
Tyvj 1728 普通平衡树 2014年8月23日6,4365 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有 ...
- 震惊!Vector两行代码求逆序对,六行代码过普通平衡树
Vector两行代码求逆序对 背景:济南集训Day7上午T2,出了一道逆序对的裸题,SB的我没看出是逆序对来,于是现场推了一个很刁钻的求逆序对的方法 首先我们想一下冒泡排序的过程,我们不难发现,对于每 ...
- BZOJ3196 二逼平衡树 ZKW线段树套vector(滑稽)
我实在是不想再打一遍树状数组套替罪羊树了... 然后在普通平衡树瞎逛的时候找到了以前看过vector题解 于是我想:为啥不把平衡树换成vector呢??? 然后我又去学了一下ZKW线段树 就用ZKW线 ...
随机推荐
- Redis(三)位图
1.目录 什么是位图 位图的作用 基本使用 2.什么是位图 位图不是一个真实的数据类型,而是定义在字符串类型上的面向位的操作的集合.由于字符串类型是二进制安全的二进制大对象,并且最大长度是 512MB ...
- Leetcode:remove_duplicates_from_sorted_list
一. 题目 给定一个排好序的链表,删除全部反复的节点,使每个节点都仅仅出现一次 比如: Given 1->1->2, return 1->2. Given 1->1-& ...
- openstack之路:KVM/Libvirt 安装
openstac是一个开源的计算机平台,利用虚拟化和底层存储服务提供云计算服务.openstack的基本是虚拟化技术.虚拟化技术采用的KVM.我们首先进行KVM软件的安装. 电脑配置: 内存:8G 硬 ...
- [数据挖掘课程笔记]SLIQ算法
1.数据结构 主要的数据结构有:1.Attribute List 2.Class List 对于数据集,每一个属性都有一个对应的Attribute List.如上图所示,每个Attribute Li ...
- Java接口测试之使用有道翻译API
写接口测试框架,找了有道翻译API来当测试数据 package com.httpGetTest; import java.beans.Encoder; import java.net.URLEncod ...
- javase练习题--每天写写
package com.javaTestDemo; import java.util.Scanner; public class JavaTest1 { public static void main ...
- APP测试走过的那些坑
我现在的工作有一大部分也是app测试,虽然自己是app开发出身,但是在测试上还是跌入了很多大坑,毕竟二者还是有很大不同,所处的角度也是不一样的.而开发转测试中,我认为较难的也是一个角度的转换,以一个开 ...
- iOS-个人开发者账号转公司开发者账号(邓白氏码申请教程)
邓白氏编码申请 个人开发者账号转公司开发者账号,首先要申请邓白氏编码-DUNS,打开https://developer.apple.com/support/进行DUNS申请! 步骤如下: 1.选择Me ...
- 关于使用response.addHeader下载中文名乱码问题
介绍下我项目中遇到的问题:在数据库导出Excel文件的过程中,导出文件中文名始终异常,最终结果发现需要在response.addHeader 中的 filename = "xxxx" ...
- DFS序+线段树(bzoj 4034)
题目链接 题目就不多说了. 本题目,可以用dfs序+线段树做:题目给定了一棵树,树上节点告诉了权值.我们可以先将这棵树进行dfs将一棵树变成线性结构:如图 变成这样后,然后就可以用线段树. 操作1:也 ...