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 访问. 插值 ...
随机推荐
- Resource接口,及资源
Resource介绍 编码的时候,除了代码本身,我们还需要对外部的资源进行处理.例如:URL资源.URI资源.File资源.ClassPath相关资源.服务器相关资源(VFS等)等等. 而这些资源的处 ...
- 一种是CI(Constructor Injection)构造方法注入,另一种是SI(Set Injection) set 注入
一:这里先说一下DI(Dependency Injection)依赖注入有种表现形式:一种是CI(Constructor Injection)构造方法注入,另一种是SI(Set Injection) ...
- 【Spark】RDD机制实现模型
RDD渊源 弹性分布式数据集(RDD).它是MapReduce模型一种简单的扩展和延伸.RDD为了实现迭代.交互性和流查询等功能,须要保证RDD具备在并行计算阶段之间能够高效地数据共享的功能特性.RD ...
- mysql 中查看指定表的字段名 (可根据字段变量生成c#后台代码)
select DISTINCT data_type from COLUMNS where table_name='表名' 用ConCat();构造生成代码.....
- u3d发布成全屏的方式
using UnityEngine; using System.Collections; public class example : MonoBehaviour { public voi ...
- 如何让View一直沿z轴旋转
#import <QuartzCore/QuartzCore.h>... CABasicAnimation *rotationAni = [CABasicAnimation animati ...
- storm深入研究
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:He Ransom链接:http://www.zhihu.com/question/23441639/answer/28075 ...
- js中数组作为参数传递的定义
下面的函数实现了一个我们想要的最基本的图片预加载效果 function preloadimages(arr){ var newimages=[] var arr=(typeof arr!= ...
- HDU2717BFS
/* WA了12发简直不能忍! . 题意非常简单.从正整数a变为b有三种方法: +1,-1.*2 特殊情况一:a与b相等不须要搜索 特殊情况二:a>b时.结果必定是a-b不需搜 特殊情况三:比較 ...
- THINKPHP include 标签动态加载文件
有时候需要在框架中动态的加载一些文件,文件名不确定,有控制器获取得到,想在模板中使用变量的形式进行加载,本以为这样写可以 结果不行 <include file="User/{$my_t ...