HDU 4585 Shaolin 找最接近的数 Treap / set

查询集合中最接近某个数的数 查询集合中最接近某个数的数 /* ★实验任务 给你一个集合,一开始是个空集,有如下两种操作: 向集合中插入一个元素。 询问集合中最接近某个数的数是多少。 ★数据输入 输入第一行为一个正整数 N,表示共有 N 个操作。 接下来 N 行,每行一个操作。 对于第一个操作,输入格式为 1 x,表示往集合里插入一个值为 x 的元素。 对于第二个操作,输入格式为 2 x,表示询问集合中最接近 x 的元素是... 阅读详情

题目链接

题意

若干组插入与询问,每次询问与当前要插入的数最接近的数。

思路

向左走向右走的时候记录一下即可。

(是最近写的 Treap 里面最简单的了(躺倒

写博客的时候想了一下,为啥不用 set 呢!因为是搜 HDU 上 Treap 相关的题目搜到的这题...。
用 set 几行就搞定了吗= =而且写 Treap 就相当于自己写了个 set 啊…。
(写 set 一开始一直 t ,后来才知道 lower_bound 是 s.lower_bound(x) 而不是 lower_bound(s.begin(), s.end(), x)

Code

Treap

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
map<int, int> m;
struct node {
    node* ch[2];
    int val, key, sz;
    node() { sz = 0; key = INT_MAX; }
    node(int x);
    void update() { sz = ch[0]->sz + ch[1]->sz + 1; }
}* null = new node;
node::node(int x) { sz = 1, val = x, key = rand(); ch[0] = ch[1] = null; }
struct Treap {
    node* root;
    Treap() { root = null; }
    bool empty() { return root == null; }
    void rotate(node*& t, bool d) {
        node* p = t->ch[d];
        t->ch[d] = p->ch[!d];
        p->ch[!d] = t;
        t->update(), p->update();
        t = p;
    }
    void insert(node*& t, int x, int& lo, int& hi) {
        if (t == null) { t = new node(x); return; }
        bool d = x > t->val;
        if (d == 0) hi = t->val;
        else lo = t->val;
        insert(t->ch[d], x, lo, hi);
        if (t->ch[d]->key < t->key) rotate(t, d);
        else t->update();
    }
    int findpos(int x) {
        int lo = -inf, hi = inf;
        insert(root, x, lo, hi);
        return hi-x < x-lo ? hi : lo;
    }
    void clear(node*& t) {
        if (t->ch[0] != null) clear(t->ch[0]);
        if (t->ch[1] != null) clear(t->ch[1]);
        delete t; t = null;
    }
    void clear() { clear(root); }
    void insert(int x) { int lo, hi; insert(root, x, lo, hi); }
}* treap = new Treap;
int n, id, x;
void work() {
    if (!treap->empty()) treap->clear();
    treap->insert(1000000000);
    m.clear(); m[1000000000] = 1;
    for (int i = 0; i < n; ++i) {
        scanf("%d%d", &id, &x);
        m[x] = id;
        printf("%d %d\n", id, m[treap->findpos(x)]);
    }
}
int main() {
    while (scanf("%d", &n) && n) work();
    return 0;
}

Set

#include <bits/stdc++.h>
using namespace std;
map<int, int> m;
set<int> s;
int n, id, x;
void work() {
    s.clear(); s.insert(1000000000);
    m.clear(); m[1000000000] = 1;
    for (int i = 0; i < n; ++i) {
        scanf("%d%d", &id, &x);
        auto it = s.lower_bound(x);
        int g;
        if (it == s.begin()) g = *it;
        else if (it == s.end()) g = *(--it);
        else {
            int hi = *it; int lo = *(--it);
            g = hi - x < x - lo ? hi : lo;
        }
        printf("%d %d\n", id, m[g]);
        m[x] = id;
        s.insert(x);
    }
}
int main() {
    while (scanf("%d", &n) != EOF && n) work();
    return 0;
}
二分法之查找最接近目标数的数 /* Name: 01_查找最接近的元素 Copyright:  Author:  Date: 23-01-18 11:05 Description:  查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个非降序列中,查找与给定值最接近的元素。 输入 第一行包含一个整数n,为非降序列长度。1 第二行包含n个整数,为非降序列各 阅读详情

相关推荐

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

xu_white的博客 7583

从一个数组中查找和目标数最接近的或者相等的数

/**  * 查找出最接近目标值的数,并返回。  * @param array  * @param targetNum  * @return  */ public static Integer binarysearchKey(Object[] array, int targetNum) { Arrays.sort(array); int targetindex = 0;

沉底的石头 3万+

光耦继电器电路分析

光耦电路的分析笔记

MingYue_SSS的博客 6878

找出最接近的数据-MATLAB

比如要找出一组数A中最接近0.001的数 [~, index]=min(abs(A(:)-0.001)) index是最接近0.001的索引 则最近的值为: Y=A(index);

naturly的博客 5715

Vue3实战:企业级应用集成钉钉扫码登录全流程解析

本文详细解析了在Vue3企业级应用中集成钉钉扫码登录的全流程。从钉钉开放平台应用创建与配置,到Vue3前端如何优雅地嵌入并管理扫码组件,再到后端如何安全地处理OAuth 2.0授权码以换取用户信息并完成登录,提供了完整的实战代码与避坑指南。该方案能有效实现安全便捷的单点登录,统一企业身份认证。

weixin_29019241的博客 289

比较几款国际主流的电子元器件及物料清单管理软件 – 工具汇总

Arenasolution 老牌的基于云计算物料清单管理软件,bom.com就是他们家的,10天免费试用,功能被分成4个不同的产品, 和传统ERP功能上有重叠,偏向于物流生产规划,一定程度可以取代ERP的生产规划模块,平均价格70美元/月/席位。网页客户端,不支持离线   SiliconExpert 曾经的老牌物料清单管理软件,后被Arrow 收购,14天免费试用,功能被分成4个不同的产品

u012062784的专栏 7235

扩展的find算法 -- find_nearest(查询最接近的数据)

通常使用需要快速查找定位的数据时,会通过 set/map 等保存数据,然后使用find等算法进行查找。但有时想查找的数据不能完全匹配,而是查找一个最接近的值(比如,在两个不同的数据结构中,想匹配出ID相同,且发生时间最接近的数据)时,STL没有提供可用的函数,一般的做法就是将数据全部遍历计算一遍,然后选取最接近的值。其算法复杂度为 O(n)。通过扩展,写出通用的模版算法 find_nearest 可以完成这个功能

fishjam的专栏 4728

Qoder CN 完全指南:阿里云AI智能体的全景拆解

阿里云旗下AI编程助手"通义灵码"于2026年5月20日升级为QoderCN,转型为覆盖软件开发与办公场景的AI智能体产品矩阵。该平台具备四大核心能力:代码补全、智能问答、文件编辑和智能体模式,支持GLM、DeepSeek等多模型切换。特色功能包括Quest2.0任务委派、专家团协作和记忆感知,满足金融、政务等行业的合规需求。产品形态涵盖IDE插件、CLI工具、办公助手和数字员工,形成"全家桶"式解决方案。相比Cursor等海外产品,QoderCN更注重全链路覆盖,个

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 934

HDU 4585 Shaolin(Treap)

题目链接:点击打开链接 题意: 少林寺的每个和尚均有编号和战斗等级,新来的小和尚均要和老和尚比试,从老和尚中选和自己的战斗等级相差最少的比,如果有两个,选比自己战斗等级小的和尚。每个和尚的编号和战斗等级均唯一。 其实这是个水题,直接用map即可,但为了练习Treap,采用Treap方法。 可以想到采用的数据结构要能动态的维护一个有序序列(战斗等级,由于战斗等级和编号为一对一映射,直接维护战

不忘初心 522

社会网络仿真软件:NetLogo_(14).社会网络数据导入与导出

在NetLogo中,社会网络的仿真不仅依赖于模型的内部逻辑,还需要能够灵活地导入和导出数据。这使得用户可以利用外部数据来初始化模型,或者将模型的运行结果导出以便进一步分析。本节将详细介绍如何在NetLogo中实现社会网络数据的导入和导出,包括常见的数据格式和具体的代码示例。

kkchenjj的博客 600

openbmc mctp i3c适配步骤

本文介绍了在Intel OKS平台下,BMC作为I3C从设备如何适配MCTP over I3C的实现方法。主要内容包括:1)关键术语解释,如MDB(Mandatory Data Byte)值为0xAE,DCR(Device Characteristics Register)和BCR(Bus Characteristics Register)的设置;2)适配流程说明,包括BMC作为控制器主节点分配地址后成为MCTP端点,CPU作为总线所有者的角色转换;3)测试验证步骤,展示通过mctp-client工具发送指

wit_yuan的专栏 132

HDU4585 Shaolin(treap)

题目链接 Input There are several test cases. In each test case: The first line is a integer n (0 The monks are listed by ascending order of jointing time.In other words, monks who joined S

HOrchard 398

基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188)

当前智能门锁项目是基于STM32微控制器、ESP8266-WIFI模块、OLED显示屏、指纹模块、蓝牙模块、门禁刷卡模块、烟雾检测模块、火光检测模块、温湿度检测模块等硬件设备开发的一种智能门锁系统

1万+

HDU4585 Shaolin——map、treap

传送门 Problem Description Shaolin temple is very famous for its Kongfu monks.A lot of young men go to Shaolin temple every year, trying to be a monk there. The master of Shaolin evaluates a young man mainly by his talent on understanding the Buddism scriptur

lllllan 225

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu 4585 Shaolin

Shaolin Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Problem Description Shaolin temple is very famous for its Kongfu monks.A lot of young men go to Shaolin temple every year, trying to be a monk there. The master of

GitHub:https://github.com/myp020301 318

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hdu 4585 Shaolin (Treap)

Shaolin Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 3340    Accepted Submission(s): 1423 Problem Description Shaolin temple is very

Timeclimber 522

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HDU 4585(Shaolin-Treap的lower_bound&upper_bound操作)

题意:有n个数,每个数进来时求出与它与它最接近的数的编号(多个答案选数小的)模板测试#include <iostream> #include <cmath> #include <algorithm> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <map> #include <fun

nike0good |Oier&ACMer | 熟能生巧 430

hdu 4585 Shaolin treap

Shaolin Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 65535/32768 K (Java/Others) Problem Description Shaolin temple is very famous for its Kongfu monks.A lot of young men go to Shaolin t...

weixin_30526593的博客 120

HDU 4585- Shaolin

J - Shaolin Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4585 Description Shaolin temple is very famous for its Kongfu monk

qq_18661257的专栏 873

最接近的数

有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小) 给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。 测试样例: 2 返回:[1,4] 根据《程序员面试金典》上的位算数解法写的。 c01是拖尾0的...

chy010131的博客 355

在vector中查找与指定值最接近的元素_Excel最常用的10个函数

你是否遇到过这样的情况?处理Excel数据时,心里明明觉得某个问题是可以用函数来解决的,但是就是想不起来是哪一个函数。或者能想起名字,但却忘了函数的具体用法。希望这篇文章可以帮助你,一起来掌握咱们工作中最常用的Excel函数吧。SUM语法:SUM(number1,[number2],...)功能说明:为值求和。 可以将单个值、单元格引用或是区域相加,或者将三者的组合相加。举个栗子IF 语法:IF(...

weixin_39678493的博客 1154

16. 最接近的三数之和

题目 16. 最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。 找出 nums 中的三个整数,使得它们的和与 target 最接近。 返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 题解...

dev_zyx的博客 333

在列表中找出两个彼此最接近但不相等的数

在列表中找出两个彼此最接近但不相等的数 data=[1,5,7,45,3,12,18] def seqnum(data): dd=max(data) for i in data: for j in data: if i==j: continue d=abs(i-j) if d <dd:

fitzgerald0的博客 2516
上一篇: HDU 5877 Weak Pair dfs序 + 树状数组 + 离散化
下一篇: BZOJ 2212 [Poi2011]Tree Rotations 线段树合并
kkkkahlua
博客等级 码龄12年 4粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值