邻值查找—算法进阶指南

邻值查找

给定一个长度为 n 的序列 A,A 中的数各不相同。对于 A 中的每一个数 Ai,求: min1≤j<i|Ai−Aj|

以及令上式取到最小值的 j(记为 Pi)。若最小值点不唯一,则选择使 Aj 较小的那个。

输入格式
第一行输入整数n,代表序列长度。
第二行输入n个整数A1…An,代表序列的具体数值,数值之间用空格隔开。

输出格式
输出共n-1行,每行输出两个整数,数值之间用空格隔开。
分别表示当i取2~n时,对应的min1≤j<i|Ai−Aj|和Pi的值。

数据范围
n≤105,|Ai|≤109
输入样例:
3
1 5 3
输出样例:
4 1
2 1


这里提供一个双向链表的写法


EXAMPLE IN PUT
10
4 5 6 1 2 3 7 8 9 10

OUTPUT
1 1
1 2
3 1
1 4
1 5
1 3
1 7
1 8
1 9

具体思路如下图
Befor

value45612378910
id12345678910

我们先标记初始值的id

Sorted 我们在前后设置了两个哨兵。

value12345678910
id04561237891011

然后从后面枚举

value12345678910
id04561237891011

得到
相邻最小可选的 id——9 11
———————value—1 ∞
我们选出最佳的 id 是 9 .
如图,我们删去这个元素,把这个删去元素的前后相连。
不断重复如上操作,最后到只剩一个元素。

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N = 1e5 + 10;
int p[N], l[N], r[N], n;
pair<int, int> a[N], ans[N];
int main() {scanf("%d", &n);for(int i = 1; i <= n; i++) {scanf("%d", &a[i].first);a[i].second = i;}a[0].first = 1e9;a[n + 1].first = -1e9;sort(a + 1, a + n + 1);for(int i = 1; i <= n; i++) {p[a[i].second] = i;l[i] = i - 1;r[i] = i + 1;}for(int i = n; i >= 2; i--) {int pos = p[i];int Left = l[pos];int Right = r[pos];int vl = abs(a[pos].first - a[Left].first);int vr = abs(a[pos].first - a[Right].first);if(vl <= vr) {ans[i].first = vl;ans[i].second = a[Left].second;}else {ans[i].first = vr;ans[i].second = a[Right].second;}r[Left] = Right;l[Right] = Left; }for(int i = 2; i <= n; i++)printf("%d %d\n", ans[i].first, ans[i].second);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我眼中的 NCC,WTM 寻亲之旅

峥嵘岁月如谢花流水&#xff0c;三朝五帝如散雾云海。开发语言更迭如此。我们所坚持的&#xff0c;只是那最初的感动&#xff0c;那“只是在人群中多看了你一眼”的惊艳。三十年河东&#xff0c;三十年河西&#xff0c;不忘初心&#xff0c;方得始终&#xff01;嗯&#xff0c;…

Codeforces Round #594 (Div. 2) C. Ivan the Fool and the Probability Theory 思维 + dp

文章目录题意&#xff1a;思路题意&#xff1a; 思路 一开始找规律&#xff0c;表都打好了&#xff0c;没找出来。。 找规律还是适合让队友来。 先考虑第一行&#xff0c;我们先计算第一行的方案数&#xff0c;设f[i][j]f[i][j]f[i][j]表示到了iii位&#xff0c;第iii位的颜色…

国王游戏

国王游戏 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。 首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。 然后,让这 n 位大臣排成一排,国王站在队伍的最前面。 排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金…

Wtm携手LayUI -- .netcore 开源生态我们是认真的!

经过WTM团队和LayUI团队多次深入协商&#xff0c;双方于2019年7月29日在北京中国国际展览中心正式达成战略合作意向&#xff0c;双方签署了战略合作框架协议&#xff0c;LayUI团队承诺使用WTM框架的任何项目都可以免费使用其收费版的后台模板&#xff0c;WTM团队则从受捐助款项…

Codeforces Round #305 (Div. 1) D. Mike and Fish 欧拉回路

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 欧拉回路经典题。 将其转换成图上问题&#xff0c;对于横纵坐标我们将其分开&#xff0c;对于(x,y)(x,y)(x,y)我们将其横纵坐标连一个无向边&#xff0c;现在问题就转换成了我们需要对每条…

经典二分:秦腾与教学评估

秦腾与教学评估 题面描述 在秦腾进入北京大学学习的第一个学期&#xff0c;就不幸遇到了前所未有的教学评估。在教学评估期间&#xff0c;同学们被要求八点起床&#xff0c;十一点回宿舍睡觉&#xff0c;不准旷课&#xff0c;上课不准迟到&#xff0c;上课不准睡觉……甚至连著…

高性能动态编译库Natasha发布1.0版本!

一、 前言对于开源贡献者&#xff0c;Emit和表达式树不是陌生的字眼&#xff0c;IL的动态特性为封装工作带来了极大的方便&#xff0c;会Emit的开发者可以说驾驭了大部分的高性能、高动态的编程技巧。纵观ef、dapper、json.net等第三方常用库&#xff0c;哪个能脱离emit而独善其…

Codeforces Round #245 (Div. 1) E. Points and Segments 欧拉回路 + 建模

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 考虑对于线段&#xff0c;如何建模。 我们考虑先将线段转换成左闭右开的形式&#xff0c;将左右点连起来。 再考虑每个点&#xff0c;将所有离散化后的点拿出来&#xff0c;每个点都有一个…

最大子序和:单调队列维护一个上升序列

最大子序和 输入一个长度为n的整数序列&#xff0c;从中找出一段长度不超过m的连续子序列&#xff0c;使得子序列中所有数的和最大。 注意&#xff1a; 子序列的长度至少是1。 输入格式 第一行输入两个整数n,m。 第二行输入n个数&#xff0c;代表长度为n的整数序列。 同一行…

微软.Net Core 3.0 预览版7发布:大幅减少 SDK 空间大小

据悉&#xff0c;这个预览版是 .Net Core 3 中重要的版本&#xff0c;可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话&#xff09;&#xff0c;故可在生产环境进行开发和部署。Windows, macOS 和 Linux 版本的Download .NET …

2016-2017 Central Europe Regional Contest Hangar Hurdles 克鲁斯卡尔重构树 + 建图

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 有一个n∗nn*nn∗n的网格图&#xff0c;有若干位置有障碍&#xff0c;有qqq个询问&#xff0c;每次询问给出两个点坐标x1,y1,x2,y2x1,y1,x2,y2x1,y1,x2,y2,询问把一个正方形箱子从x1,x2x1,x2x1,x2推到y1,y2y…

5门可能衰落的编程语言

专注于为北美地区的科技专业人士提供行业见解和分析&#xff0c;以及提供求职消息的技术职业消息服务网站 Dice Insights 近日发表了一篇题为《5 Programming Languages That Are Probably Doomed》的文章。作者主要根据 TIOBE 和 RedMonk 这两个编程语言排行榜&#xff0c;以及…

POJ3320 Jessica's Reading Problem 尺取法

Jessica’s Reading Problem、 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22716 Accepted: 7687 Description Jessica’s a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is coming, yet she has spent little …

#2686. 「BalticOI 2013」雪地足迹 双端队列01bfs + 模型转换

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个n∗mn*mn∗m的图&#xff0c;如果某个位置字符为RRR代表兔子走过&#xff0c;如果为FFF代表狐狸走过&#xff0c;如果...代表谁都没走过&#xff0c;每只动物必须从左上角进来&#xff0c;右下角出去…

.NET加水印/验证码的NuGet包

.NET加水印/验证码的NuGet包 我的在前两篇文章中&#xff0c;我介绍了使用Direct2D给图片加水印/验证码&#xff0c;今天我将其进行了封装&#xff0c;发布了一个NuGet包Sdcb.Imaging&#xff1a;<PackageReference Include"Sdcb.Imaging" Version"1.1.0&quo…

hdu1686:KMP板子

题目链接 题目大意就是给你两个字符串&#xff0c;求出第一个字符串在第二个字符串中出现的次数。 如果我们暴力匹配的话&#xff0c;复杂度是 len(first) * len(second) 对于题目给的 1e4 * 1e6 显然暴力不可取&#xff0c; 这里就用到 KMP 。 说到 KMP 最难理解的就是 next…

集群故障处理之处理思路以及健康状态检查(三十三)

前言 按照笔者的教程&#xff0c;大家应该都能够比较顺畅的完成k8s集群的部署&#xff0c;不过由于环境、配置以及对Linux、k8s的不了解会导致很多问题、异常和故障&#xff0c;这里笔者分享一些处理技巧和思路&#xff0c;以及部分常见的问题&#xff0c;以供大…

Educational Codeforces Round 32 G. Xor-MST 01tire + 分治 + Boruvka

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个长度为nnn序列aaa&#xff0c;每两个点之间的边权为ai⊕aja_i\oplus a_jai​⊕aj​&#xff0c;问你最小生成树的权值是多少。 n≤2e5,ai<230n\le2e5,a_i< 2^{30}n≤2e5,ai​<230 思路&am…

Trie初步

简单的描述就是一个字典树&#xff0c; 我们用下图来简单描述一下。 上述的字典树代表着 ab abc abk cd ca b 这六个单词&#xff0c;我们不难发现其中标记是红色的代表从一个伪根节点到这是一个完整的单词。不同的单词有重复的部分&#xff0c;例如accepted&#xff0c;accep…

XXI Open Cup. Grand Prix of Korea I. Query On A Tree 17 树剖 + 二分 + 树带权重心

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一棵树&#xff0c;每棵树初始权值都为000&#xff0c;现在给你两个操作&#xff1a; (1)(1)(1)将uuu的子树权值全部加111。 (2)(2)(2)将(u,v)(u,v)(u,v)路径上的点权值都加111。 每次输出一个点xxx,满…