This commit is contained in:
1 parent
8e1bfd9d9e
commit
c5eebf5252
2 files changed
+72
No files matched your search
+25
@@ -0,0 +1,25 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
set<int> s;
|
||||||
|
map<int, int> rev;
|
||||||
|
int n;
|
||||||
|
int tmp;
|
||||||
|
int main(void) {
|
||||||
|
scanf("%d%d", &n, &tmp), s.insert(tmp), rev[tmp] = 1;
|
||||||
|
for(int i = 2; i <= n; i++) {
|
||||||
|
scanf("%d", &tmp), s.insert(tmp), rev[tmp] = i;
|
||||||
|
auto lb = s.lower_bound(tmp), ub = s.upper_bound(tmp);
|
||||||
|
int minval = INT_MAX, ind = 0;
|
||||||
|
if(lb != s.begin()) {
|
||||||
|
--lb;
|
||||||
|
if(abs(tmp - *lb) < minval)
|
||||||
|
minval = abs(tmp - *lb), ind = rev[*lb];
|
||||||
|
}
|
||||||
|
if(ub != s.end())
|
||||||
|
if(abs(tmp - *ub) < minval)
|
||||||
|
minval = abs(tmp - *ub), ind = rev[*ub];
|
||||||
|
printf("%d %d\n", minval, ind);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# P10466 邻值查找
|
||||||
|
|
||||||
|
## 题目描述
|
||||||
|
|
||||||
|
给定一个长度为 $n$ 的序列 $A$,$A$ 中的数各不相同。
|
||||||
|
|
||||||
|
对于 $A$ 中的每一个数 $A_i$,求:
|
||||||
|
|
||||||
|
$\min_{1 \le j <i}|A_i-A_j|$
|
||||||
|
|
||||||
|
以及令上式取到最小值的 $j$(记为 $P_i$)。若最小值点不唯一,则选择使 $A_j$ 较小的那个。
|
||||||
|
|
||||||
|
## 输入格式
|
||||||
|
|
||||||
|
第一行输入整数 $n$,代表序列长度。
|
||||||
|
|
||||||
|
第二行输入 $n$ 个整数 $A_1 \sim A_n$,代表序列的具体数值,数值之间用空格隔开。
|
||||||
|
|
||||||
|
## 输出格式
|
||||||
|
|
||||||
|
输出共 $n-1$ 行,每行输出两个整数,数值之间用空格隔开。
|
||||||
|
|
||||||
|
分别表示当 $i$ 取 $2 \sim n$ 时,对应的 $\min_{1 \le j <i}|A_i-A_j|$ 和 $P_i$ 的值。
|
||||||
|
|
||||||
|
## 输入输出样例 #1
|
||||||
|
|
||||||
|
### 输入 #1
|
||||||
|
|
||||||
|
```
|
||||||
|
3
|
||||||
|
1 5 3
|
||||||
|
```
|
||||||
|
|
||||||
|
### 输出 #1
|
||||||
|
|
||||||
|
```
|
||||||
|
4 1
|
||||||
|
2 1
|
||||||
|
```
|
||||||
|
|
||||||
|
## 说明/提示
|
||||||
|
|
||||||
|
对于 $30\%$ 的数据 $n \le 100$。
|
||||||
|
|
||||||
|
对于 $70\%$ 的数据 $n \le 10^4$。
|
||||||
|
|
||||||
|
对于 $100\%$ 的数据 $n \le 10^5,|A_i| \le 10^9$。
|
||||||
Reference in new issue
Block a user