CH1301 邻值查找【set应用】
1301 邻值查找 0x10「基本数据结构」例题
描述
给定一个长度为 n 的序列 A,A 中的数各不相同。对于 A 中的每一个数 A_i,求:
min(1≤j<i) |A_i-A_j|
以及令上式取到最小值的 j(记为 P_i)。若最小值点不唯一,则选择使 A_j 较小的那个。
输入格式
第一行一个整数n,第二行n个数A_1~A_n。
输出格式
n-1行,每行2个用空格隔开的整数。分别表示当i取2~n时,对应的 min(1≤j<i) |A_i-A_j| 和 P_i 的值。
样例输入
3
1 5 3
样例输出
4 1
2 1
数据范围与约定
- 对于30%的数据: n<=100
- 对于70%的数据: n<=10^4
- 对于100%的数据: n<=10^5, |A_i|<=10^9
思路:
用set或者是链表实现
读入第i个时,加入set,set中存的就是i之前的所有数,而且set是默认排好序的。
然后find找到i的位置,|Aj-Ai|最小的一定是Ai的前驱或者后继。
判断一下就行了。要注意Ai就是set的头或尾的情况。
奇怪的是,用printf输出的时候有一点问题不知道是为什么,用cout就行。
// ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// //#include "pch.h"
#include <iostream>
#include <set>
#include <cmath>
#include <stdio.h>
using namespace std; int n;
const int maxn = 1e5 + ;
struct node {
int a;
int id;
bool operator < (const node &b)const {
return a < b.a;
}
}A[maxn];
set<node>sss;
set<node>::iterator after;
set<node>::iterator before; int main()
{
scanf("%d", &n);
scanf("%d", &A[].a);A[].id = ;
sss.clear();
sss.insert(A[]);
for (int i = ; i <= n; i++) {
scanf("%d", &A[i].a);
A[i].id = i;
sss.insert(A[i]);
after = sss.find(A[i]);
before = sss.find(A[i]);
//cout<<(*after).id<<endl;
if (after == sss.begin()) {
after++;
cout<<abs((*after).a - A[i].a)<<" "<<(*after).id<<endl;
//printf("%d %d\n", abs((*after).a - A[i].a), (*after).id);
}
else if (after++, after == sss.end()) {
before--;
//node tmp = *before;
//printf("%d\n", tmp.a);
cout<<abs((*before).a - A[i].a)<<" "<<(*before).id<<endl;
//printf("%d %d\n", abs((*before).a - A[i].a), (*before).id);
}
else {
before--;
if (abs((*before).a - A[i].a) < abs((*after).a - A[i].a)) {
cout<<abs((*before).a - A[i].a)<<" "<<(*before).id<<endl;
}
else if(abs((*before).a - A[i].a) > abs((*after).a - A[i].a)){
cout<<abs((*after).a - A[i].a)<<" "<<(*after).id<<endl;
}
else {
if ((*before).a < (*after).a) {
cout<<abs((*before).a - A[i].a)<<" "<<(*before).id<<endl;
}
else {
cout<<abs((*after).a - A[i].a)<<" "<<(*after).id<<endl;
}
}
}
}
}
CH1301 邻值查找【set应用】的更多相关文章
- 【题解】邻值查找 [CH1301]
[题解]邻值查找 [CH1301] 传送门:邻值查找 \([CH1301]\) \([AcWing136]\) [题目描述] 给定一个长度为 \(n\) 的序列 \(A\),\(A\) 中的数各不相同 ...
- 0x13链表与邻接表之邻值查找
题目链接:https://www.acwing.com/problem/content/138/ 参考链接:https://blog.csdn.net/sdz20172133/article/deta ...
- 1301 邻值查找(set 平衡树 | 链表)
描述 给定一个长度为 n 的序列 A,A 中的数各不相同.对于 A 中的每一个数 A_i,求: min(1≤j<i) |A_i-A_j| 以及令上式取到最小值的 j(记为 P_i).若最小值点 ...
- map按value值查找——find_if的使用(转载)
转载:http://www.cnblogs.com/xufeiyang/archive/2012/05/09/2491871.html CValueFind #ifndef _CVALUEFIND_H ...
- 【数据结构】 顺序表查找(折半查找&&差值查找)
#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 10 首先构造一个 ...
- 查找算法(3)--Interpolation search--插值查找
1. 插值查找 (1)说明 在介绍插值查找之前,首先考虑一个新问题,为什么上述算法一定要是折半,而不是折四分之一或者折更多呢? 打个比方,在英文字典里面查“apple”,你下意识翻开字典是翻前面的书页 ...
- PHP 根据值查找键名
array_search (PHP 4 >= 4.0.5, PHP 5) mixed array_search ( mixed $needle , array $haystack [, bool ...
- Java枚举-通过值查找对应的枚举
一.背景 Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等. 最近工作中,对接了很多其他的系统,发现对接的同一个系统 ...
- C#算法设计查找篇之03-插值查找
插值查找(Interpolation Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/701 访问. 插值 ...
随机推荐
- e685. 显示页面格式窗口
The page format dialog allows the user to change the default page format values such as the orientat ...
- par函数usr参数-控制坐标系的范围
在R语言中,会根据数据的范围自动计算x轴和y轴的范围,举个例子 比如绘制一个1到5的散点图:代码示例: plot(1:5, 1:5) 生成的图片如下: 从图片中我们可以看到,x轴的起始位置比1要小,终 ...
- PHP curl_setopt函数用法介绍补充篇
1.curl数据采集系列之单页面采集函数get_html 单页面采集在数据采集过程中是最常用的一个功能 有时在服务器访问限制的情况下 只能使用这种采集方式 慢 但是可以简单的控制 所以写好一个常用的c ...
- fstrict-aliasing
承如“optimization blocks”文中所述,由于相同的指针可能指向相关的内存区,因此编译器将不做过分的优化…… 特意搜了下编译器在不同的优化等级下都有哪些默认优化,因此有了此记录(比较长, ...
- [转]lsof详解
lsof是一个功能强大的诊断工具,它可以通过进程与打开的文件进行联系,可以列出一个进程打开的所有文件信息. 1 寻找与打开的文件相关联的进程通过指定文件,可以发现正在使用这个文件的进程# lsof / ...
- LoadRunner 调用dll方法
本文主要介绍简单DLL的编写方法及在LoadRunner中局部调用与全局调用DLL方法. 1.动态链接库的编写 在Visual C++6.0开发环境下,打开FileNewProject选项,可以选择W ...
- Loadrunner 9.5_webservice(SOAP)性能测试
WebService定义:Webservice是一种新的使用基于XML标准和协议来交换信息的WEB应用程序.是基于SOAP(简单对象访问协议)消息的应该协议,只是为WEB页面或可执行程序提供编程接口. ...
- 【matlab】输出显示函数 sprintf()&disp()
disp()功能类似于c语言中的print:java语言中的System.out.println(): Matlab的disp()函数 : 1.输出字符串: >>disp('my tes ...
- jQuery Datatable 转载
jQuery Datatable 实用简单实例 时间 2014-05-08 10:44:18 51CTO推荐博文 原文 http://sgyyz.blog.51cto.com/5069360/14 ...
- mongodb启动时报错ERROR: child process failed, exited with error number 1
不多说,直接上干货! 前期博客 Ubuntu14.04下Mongodb安装部署步骤(图文详解) Ubuntu16.04下Mongodb安装部署步骤(图文详解) root@zhouls-virtual- ...