题目链接: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. 开启windows的 admin+开启tel+电源+远程功能

    1.控制面板   小图标   程序功能   打开关闭windows功能     开启Telnet 的服务两个都选         2. 启动tel服务   控制面板  小图标 管理工具 服务 找到 t ...

  2. 【Python基础】lpthw - Exercise 40 模块、类和对象

    一. 模块(module) 模块中包含一些函数和变量,在其他程序中使用该模块的内容时,需要先将模块import进去,再使用.操作符获取函数或变量,如 # This goes in mystuff.py ...

  3. 使用sessionStorage进行数据存值

    <!DOCTYPE html> <head> <meta charset="UTF-8" /> <meta name="view ...

  4. react高阶组件的使用

    为了提高代码的复用在react中我们可以使用高阶组件 1.添加高阶组件 高阶组件主要代码模板HOC.js export default (WrappedComponent) => { retur ...

  5. sourceTree如何不用注册就使用

    下载好之后会有这么一个界面要求你注册或登录.(不管它)将下面的一串串放进我的电脑的地址栏,打开sourcetree的文件夹 %LocalAppData%\Atlassian\SourceTree\ 注 ...

  6. nodejs技术升阶思路

    经历一两年的node后端开发,熟悉了node原生api.常用包.数据库操作语句.一两个框架等,技术会达到一个瓶颈.如果没有足够的动力去深入,很容易老死在这个瓶颈上. 下面总结一下,提升点和方向: 站在 ...

  7. spring-data-radis错误

    org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested ...

  8. StrictRedis

    StrictRedis对象⽅法 通过init创建对象,指定参数host.port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0 sr = Strict ...

  9. Linux定时任务调用sh文件

    1.编写sh文件 创建:vi test.sh 写入:date >> /xiaol/data.txt 2.默认创建的这个sh问件是没有执行权限的,修改权限 chmod 777 test.sh ...

  10. shell脚本中各类括号的作用(小结)

    技巧小结: 字符串比较用双中括号[[ ]]:算数比较用单中括号[ ]——左右留空格 算数运算用双小括号(( )) :shell命令及输出用小括号( )——左右不留空格 快速替换用花括号{ }——左右留 ...