双指针水题,安利while循环的指针移动写法
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn = 100000 + 100;
LL a[maxn];
int main(){
LL n;
scanf("%lld",&n);
for( LL i = 1;i <= n;i++ ){
scanf("%lld",&a[i]);
}
a[0] = 0;
LL le = 1,ri = n;
while( le+1 <= n &&a[le+1] >= a[le] ) le++;
while( ri-1 >= 1 && a[ri-1] <= a[ri] ) ri--;
if( le >= ri ){
printf("0\n");
return 0;
}
LL r = ri,l = le;
LL ans = 1 << 30;
for( LL i = 0;i <= le;i++ ){
while( r <= n && a[r] < a[i] ) r++;
ans = min( (r-1) - ( i+1 )+1,ans );
}
printf("%lld\n",ans);
return 0;
}