https://ac.nowcoder.com/acm/contest/11221/A
#include<bits/stdc++.h>

using namespace std;

const int N = 3e6 + 10;

int a[N];
int n;
struct Node {
int l, r, val;
};
bool cmp (Node a, Node b) {
if (a.val != b.val) return a.val > b.val;
return a.l < b.l;
}
void solve() {
scanf("%d", & n);
for (int i= 1; i<= n; i ++)
scanf("%d", & a[i]);
vector<Node> q;
int l =1;
for (int i = 2; i <= n; i ++) {
if (a[i] < a[i - 1]) {
Node N = {l, i - 1, a[i - 1] - a[l]};
q.push_back(N);
l = i;
}
}
Node N = {l, n, a[n] - a[l]};
q.push_back(N);
sort(q.begin(), q.end(), cmp);
for (int i = 0; i < q.size(); i ++) {
if (q[i].val == q[0].val) {
cout << q[i].l << " " << q[i].r << " ";
}
}
puts("");
}
int main () {
int t;
cin >> t;
while (t --) solve();
return 0;
}

这一题直接枚举符合情况的实现是比较麻烦的,如果枚举不符合的情况是比较方便的。下次考虑枚举枚举对象