题解:
先按照a大小排序(要双关键字)
然后和a[1]一样的按照b减一减,取最小
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+;
int a[N],b[N],f[N],n;
int cmp(int x,int y)
{
return a[x]<a[y]||(a[x]==a[y]&&b[x]<b[y]);
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)scanf("%d",&a[i]),b[i]=f[i]=i;
sort(f+,f+n+,cmp);
int M=2e9,ans=2e9,k=2e9;
for (int i=;i<n;i++)M=min(abs(a[f[i]]-a[f[i+]]),M);
for (int i=;i<n;i++)
if (abs(a[f[i]]-a[f[i+]])==M&&a[f[i]]==a[f[]])
{ans=min(ans,abs(b[f[i]]-b[f[i+]]));k=a[f[i]];}
printf("%d\n",ans);
}