Description
You are given an arrayNIntegers andQQueries. Each query is a closed interval [L,R]. You shocould find the minimum absolute difference between all pairs in that interval.
Input
First line contains an integer
T(
T10 ).
TSets follow. Each set begins with an integer
N(
N200000). In the next line there are
NIntegers
AI (1
AI104), the number in
I-Th cell of the array. Next line will contain
Q(
Q104 ).
QLines follow, each containing two integers
LI,
RI (1
LI,
RI
N,
LI <
RI) describing the beginning and ending
I-Th range. Total number of queries will be less than 15000.
Output
For
I-Th query of each test output the minimum |
AJ-
AK |
LI
J,
K
RI (
J
K) A single line.
Sample Input
1101 2 4 7 11 10 8 5 1 1000041 101 23 58 10
Sample output
0134
Question: given an integer array, the query for each group is l, R, and the minimum output Interval Difference is
Thought: Sorting post-processing, but this will time out, because the question and question cannot exceed 15000, so the worst is only 15000
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;const int maxn = 200005;const int inf = 0x3f3f3f3f;int num[maxn];int tmp[maxn];int n, q;void cal(int l, int r) {if (r - l + 1 > 15000) {printf("0\n");return;}int cnt = 0;for (int i = l; i <= r; i++)tmp[cnt++] = num[i];sort(tmp, tmp+cnt);int Min = inf;for (int i = 0; i < cnt-1; i++)Min = min(Min, tmp[i+1]-tmp[i]);printf("%d\n", Min);}int main() {int t;scanf("%d", &t);while (t--) {scanf("%d", &n);for (int i = 1; i <= n; i++)scanf("%d", &num[i]);scanf("%d", &q);int l, r;while (q--) {scanf("%d%d", &l, &r);cal(l, r);}}return 0;}