对于每一个数组元素,如果他后面存在大于等于该元素的数,则这两个数可以组成一对
输出所有合法数对中的最大距离
思路:排序=将两个维度降为一个维度
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+5;
int n,ans,minp;
struct node {
int v,p;
}A[N];
int main() {
std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n; for (int i=0; i<n; i++) cin>>A[i].v, A[i].p=i;
sort(A,A+n,[&](node& a, node& b) {
if (a.v!=b.v) return a.v<b.v;
return a.p<b.p;
});
minp=A[0].p;
for (int i=1; i<n; i++) {
if (A[i].p<minp) minp=A[i].p;
else ans=max(ans, A[i].p-minp); //值和下标都大的在minp后面(因为A[minp].v肯定比A[i].v小),则证明A[i].p-minp是合法的一组
}
cout<<ans;
return 0;
}