码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 《算法竞赛进阶指南》 临值查找


    给定一个长度为 nn 的序列 AA,AA 中的数各不相同。

    对于 AA 中的每一个数 AiAi,求:

    min1≤j<i|Ai−Aj|min1≤j<i|Ai−Aj|

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

    输入格式

    第一行输入整数 nn,代表序列长度。

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

    输出格式

    输出共 n−1n−1 行,每行输出两个整数,数值之间用空格隔开。

    分别表示当 ii 取 2∼n2∼n 时,对应的 min1≤j<i|Ai−Aj|min1≤j<i|Ai−Aj| 和 PiPi 的值。

    数据范围

    n≤105n≤105,|Ai|≤109|Ai|≤109

    输入样例:

    1. 3
    2. 1 5 3

    输出样例:

    1. 4 1
    2. 2 1

    解题思路:

    /*
    1:将读入的数组从小到大排序,然后将排好队序列记录下标建立成为双向列表
    2:然后从第n个数开始枚举,每次计算左右儿子与其的差的最小值,将答案记录在内后,除去该点,继续计算第n - 1个点
    */ 

    代码:

    1. #include <cmath>
    2. #include <cstdio>
    3. #include <iostream>
    4. #include <algorithm>
    5. #define first first
    6. #define y second
    7. using namespace std;
    8. typedef long long LL;
    9. typedef pair<LL, int> PII;
    10. const int N = 100010;
    11. int n;
    12. int l[N], r[N], p[N];
    13. PII a[N], ans[N];
    14. int main()
    15. {
    16. cin >> n;
    17. for (int i = 1; i <= n; i ++ )
    18. {
    19. cin >> a[i].first;
    20. a[i].second = i;//记录他是第几个数
    21. }
    22. sort(a + 1, a + 1 + n);
    23. a[0].first = -4e9, a[n + 1].first = 4e9;//建立哨兵,防止越界
    24. for (int i = 1; i <= n; i ++ )
    25. {
    26. l[i] = i - 1, r[i] = i + 1;
    27. p[a[i].second] = i;//记录排序好后的数组在双向链表中的位置
    28. }
    29. for (int i = n; i >= 2; i -- )//从第n个数往前枚举
    30. {
    31. int point = p[i], left = l[point], right = r[point];
    32. LL left_value = abs(a[left].first - a[point].first);
    33. LL right_value = abs(a[right].first - a[point].first);
    34. //判断谁的绝对值更小,将更小的记录为答案
    35. if (left_value <= right_value) ans[i] = {left_value, a[left].y};
    36. else ans[i] = {right_value, a[right].y};
    37. l[right] = left, r[left] = right;//删掉当前以及枚举过的点
    38. }
    39. for (int i = 2; i <= n; i ++ ) printf("%lld %d\n", ans[i].first, ans[i].y);
    40. }

     

  • 相关阅读:
    java-net-php-python-springboot基于SpringBoot的OA办公管理系统计算机毕业设计程序
    Linux|centos7 Prometheus的自动服务发现 一(文件发现机制)
    9月28日复习
    dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言
    数据仓库:金融/银行业的分层架构篇
    基于SqlSugar的开发框架循序渐进介绍(25)-- 基于SignalR实现多端的消息通讯
    HTML5+CSS3小实例:带功能区的图片悬停特效
    js录制屏幕并输出视频
    堆排序算法(代码实现) [数据结构][Java]
    【java】【SSM框架系列】【二】SpringMVC
  • 原文地址:https://blog.csdn.net/qq_61935738/article/details/125617702
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号