题目链接:https://www.acwing.com/problem/content/138/

参考链接:https://blog.csdn.net/sdz20172133/article/details/80101838

能进行算术运算的迭代器只有随即访问迭代器,要求容器元素存储在连续内存空间里,vector,string,deque的迭代器是有加减法的,但是map,set,multimap,multiset的迭代器是没有加减法的,list也不可以 。但是这些stl容器可以进行++和--的操作。

stl都是左闭右开的,就是说begin()是容器里面的第一个位置,end()是最后一个元素位置加一。

对于low_bound()和upper_bound()来说,前提:一个非降序列!!!!!!

题解:(平衡树解法)

把A1,A2,......An依次插入一个集合,则插入Ai之前,集合中保存的就是满足1<=j<i的所有Aj,而且是有序的。当Ai插入时,可能插入当前set的第一个位置,最后一个位置,或者中间某一个位置。其实就是对插入排序的优化。所以要求得最小差值,只需要比较Ai的前驱和后续位置的值。

#include<iostream>
#include<queue>
#include<set> using namespace std;
struct node{
int num;
int id;
bool operator <(node a) const{
return num<a.num;
}
};
set<node> s;
int main(){
int n;
cin>>n;
for (int i = 1; i <= n; ++i) {
int tmp;
cin>>tmp;
if (i==1) {
s.insert(node{tmp,i});
continue;
}
set<node>::iterator right= s.lower_bound(node{tmp,i});
set<node>::iterator left=right;
left--;
if (right==s.end()) {
cout<<tmp-left->num<<" "<<left->id<<endl;
}else if (right==s.begin()) {
cout<<right->num-tmp<<" "<<right->id<<endl;
}else if((tmp-left->num)<=(right->num-tmp)){
cout<<tmp-left->num<<" "<<left->id<<endl; }else{
cout<<right->num-tmp<<" "<<right->id<<endl; }
s.insert(node{tmp,i});
}
return 0;
}

  

0x13链表与邻接表之邻值查找的更多相关文章

  1. 0x13 链表与邻接表

    这东西我还是有点会玩的啊.. 邻值查找这东西不就是维护个前驱后继嘛.. #include<cstdio> #include<iostream> #include<cstr ...

  2. CH1301 邻值查找【set应用】

    1301 邻值查找 0x10「基本数据结构」例题 描述 给定一个长度为 n 的序列 A,A 中的数各不相同.对于 A 中的每一个数 A_i,求:min(1≤j<i) ⁡|A_i-A_j|以及令上 ...

  3. 【题解】邻值查找 [CH1301]

    [题解]邻值查找 [CH1301] 传送门:邻值查找 \([CH1301]\) \([AcWing136]\) [题目描述] 给定一个长度为 \(n\) 的序列 \(A\),\(A\) 中的数各不相同 ...

  4. 1301 邻值查找(set 平衡树 | 链表)

    描述 给定一个长度为 n 的序列 A,A 中的数各不相同.对于 A 中的每一个数 A_i,求: min(1≤j<i) ⁡|A_i-A_j| 以及令上式取到最小值的 j(记为 P_i).若最小值点 ...

  5. 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)

    数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边& ...

  6. 邻接表(C++)

    adj_list_network_edge.h // 邻接表网边数据类模板 template <class WeightType> class AdjListNetworkEdge { p ...

  7. 图->存储结构->邻接表

    文字描述 邻接表是图的一种链式存储结构.在邻接表中,对图中每个顶点建立一个单链表,第i个单链表的结点表示依附顶点vi的边(对有向图是指以顶点vi为尾的弧).单链表中的每个结点由3个域组成,其中邻接点域 ...

  8. 第6章 图的学习总结(邻接矩阵&邻接表)

    我觉得图这一章的学习内容更有难度,其实图可以说是树结构更为普通的表现形式,它的每个元素都可以与多个元素之间相关联,所以结构比树更复杂,然而越复杂的数据结构在现实中用途就越大了,功能与用途密切联系,所以 ...

  9. 数据结构之---C语言实现图的邻接表存储表示

    // 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...

随机推荐

  1. 【Python基础】lpthw - Exercise 39 字典

    1. 字典和列表的区别 对于列表,它是一些项的有序排列,只能通过数值来进行索引:对于字典,则可以通过许多东西进行索引,它采用键-值映射的方式,不存在一个特定的顺序,因此不能用类似列表的数值索引,但它的 ...

  2. Mock Server 实现post方法的接口(三)

    Mock Server 实现post方法的接口(三) 1.mock server实现的接口,当request中未设置"method"时,会自动将所有method试一次,所以一定要指 ...

  3. C与C++相互调用

    C++编译器可以兼容并编译C语言,但优先使用C++编译方式,extern关键字让C++编译器使用C语言编译方式编译. extern "C" { // c 编译器编译的代码 } C+ ...

  4. oracle多行合并一行

    以上图为例 执行SQL语句: select d.group_id,to_char(wm_concat(d.tag)) from Imglib_Group_Tag d where d.group_id= ...

  5. hibernate学习(缓存)

    缓存,介于应用程序和永久数据存储源之间,作用是为了降低应用程序对物理数据源访问的频率,从而提高应用的运行性能. 例如我们cpu执行效率每秒处理的数据高达上千兆,而我们的硬盘读取速度却没那么高,读取几百 ...

  6. C#基础加强(7)之ref与out

    介绍 给方法传递普通参数时,值类型传递的是拷贝的对象,而引用类型传递的是对象的引用.它们都不能在函数内部直接修改外部变量的引用(不是修改引用类型的属性),而使用 ref 或 out 关键字就可以实现. ...

  7. 【EBook】-NO.161.微服务.1 -【微服务架构与实践】

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  8. 安装pwntools及对于解决问题方法搜索的经验总结

    安装pwntools 按照网站(https://www.cnblogs.com/xiao3c/p/6799745.html) 中的教程进行安装 下载pwntools 输入命令 git clone ht ...

  9. 修改haproxy配置文件

    需求: 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { 'bakend': 'www.oldboy.org', 'record':{ ...

  10. dedecms二次开发

    安装遇到的问题 修改文件如下 1.date目录下的config.cache.bak.php改成config.cache.php 2install目录下的index.html.install_lock. ...