552 字
3 分钟
Array

题面#

You are given an integer array aa of length nn.

For each index ii, find the maximum number of indices jj such that j>ij \gt i and aik>ajk|a_i - k| \gt |a_j - k|, over all possible integer values of kk.

Input

Each test contains multiple test cases. The first line contains the number of test cases tt (1t1001 \le t \le 100). The description of the test cases follows.

The first line of each test case contains an integer nn (1n50001 \le n \le 5000).

The second line contains nn integers a1,a2,,ana_1, a_2, \ldots, a_n (109ai109-10^9 \le a_i \le 10^9).

It is guaranteed that the sum of nn over all test cases does not exceed 50005000.

Output

For each test case, output nn integers denoting the answer.

思路#

对固定的位置 ii,我们可以任选整数 kk,并统计有多少个 j>ij\gt i 使得 aik>ajk|a_i-k|\gt|a_j-k|,目标是在所有 kk 中让这个数量最大化

核心观察是把 aja_jaia_i 的大小关系分开考虑
aj>aia_j\gt a_i 时,比较 aik|a_i-k|ajk|a_j-k| 可推出成立条件等价于 k>ai+aj2k\gt\dfrac{a_i+a_j}{2},因此这类 jj 只有在 kk 取在 aia_i 右侧时才可能被计入
aj<aia_j\lt a_i 时,同理可推出成立条件等价于 k<ai+aj2k\lt\dfrac{a_i+a_j}{2},因此这类 jj 只有在 kk 取在 aia_i 左侧时才可能被计入
aj=aia_j=a_i 时严格不等式永远不成立,因此不影响答案

因为同一个 kk 不可能同时满足 k>aik\gt a_ik<aik\lt a_i,所以对某个固定的 ii 来说,能被计入的 jj 必然只来自后缀中比 aia_i 大的一侧或比 aia_i 小的一侧
因此答案就是两侧计数的最大值
ansi=max(#{jj>i, aj>ai}, #{jj>i, aj<ai})ans_i=\max\Bigl(\#\{j\mid j\gt i,\ a_j\gt a_i\},\ \#\{j\mid j\gt i,\ a_j\lt a_i\}\Bigr)

这个上界可以通过极端取值的 kk 直接达到
取足够大的 kk 会让所有满足 aj>aia_j\gt a_i 的位置都满足 aik>ajk|a_i-k|\gt|a_j-k|,得到第一项
取足够小的 kk 会让所有满足 aj<aia_j\lt a_i 的位置都满足 aik>ajk|a_i-k|\gt|a_j-k|,得到第二项

代码#

#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t --) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i ++) {
cin >> a[i];
}
vector<int> ans(n);
for (int i = 0; i < n; i ++) {
int less = 0, greater = 0;
for (int j = i + 1; j < n; j ++) {
if (a[j] < a[i]) less ++;
else if (a[j] > a[i]) greater ++;
}
ans[i] = max(less, greater);
}
for (int i = 0; i < n; i ++) {
cout << ans[i] << " \n"[i == n - 1];
}
}
}
Array
https://github.com/posts/array/
作者
FZSGBall
发布于
2026-05-11
许可协议
CC BY-NC-SA 4.0