题目链接: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. Visual Studio Code for mac 设置中文

    1,mac系统VScode设置中文 macOS 快捷键:command + shift + p 输入搜索 configure language       1.Ctrl+Shift+P 打开命令 2. ...

  2. Python全局变量和局部变量相关知识点

    知识点一: #在函数外面定义的变量叫全局变量 num = 100 def AAA(): ''' 如果在函数中直接修改全局变量,那么会产生异常 如果真的需要修改,可以在函数中进行声明(前面加入globa ...

  3. C# DataTable 转 实体类

    C# 中查询结果DataTable转实体类: 比如:List<RtmInterview> rtmList = GetDataById( id); public List<RtmInt ...

  4. 对于Dubbo的理解

    最近才开始看关于Dubbo,曾经居然把Dubbo跟ActiveMQ联系到了一起,很显然 ,是没有深入理解Dubbo的本质. 其实Dubbo是项目与项目(或者是系统与系统)之间通信用的.在Dubbo没出 ...

  5. AKA “Project” Milestone

    Homework 6 (60 points)Due Thursday, April 25th at 11:59pm (via blackboard) AKA “Project” Milestone # ...

  6. linux和shell的学习记录

    1.16条常用的命令 .文件的权限修改:(把文件1.txt的归属改为mysql的,然后ll查看) chown mysql:mysql .txt .增加当前用户的x权限,然后ll查看: chomd u+ ...

  7. vueX、vue中transition的使用、axios

    引入一篇好文章链接:看一遍就会的vuex文章;完!!! vue中transtion的使用:transition文章;完!!! axios的文章:axios;完!!!

  8. 【Common】-NO.122.common.1 - pv、uv、ip,tps、qps、rps术语

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

  9. leaflet.toolbar.js

    leaflet.toolbar.js 参考:https://www.javascriptcn.com/read-38464.html

  10. hibernate连接数据库和使用

    hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibe ...