int getMinSortLength(vector<int> arr, int len) {
if(len <= 1) return 0;
int maxLeft = arr[0];
int minRight = arr[len-1];
int start = 0;
int end = len-1;
for(int i = 1; i < len; i++){
if(arr[i] >= maxLeft){
maxLeft = arr[i];
}else{
start = i;
}
}
for(int i = len-2; i >= 0; i--){
if(arr[i] <= minRight){
minRight = arr[i];
}else{
end = i;
}
}
return start-end+1;
}
n=int(input()) if n==0: print(0) else: arr=[int(i) for i in input().strip().split()] mx=arr[0];r=0; for i in range(len(arr)): mx=max(mx,arr[i]) if mx>arr[i]: r=i; mx=arr[-1];l=len(arr)-1; for i in reversed(range(len(arr))): mx=min(mx,arr[i]) if mx<arr[i]: l=i; print(max(0,r-l+1))
import java.util.*;
public class ShortSubsequence {
public int findShortest(int[] A, int n) {
if(n <= 1) return 0;
int maxLeft = A[0];
int minRight = A[n - 1];
int start = 0;
int end = n - 1;
//从左到右求无序时最右的位置
for(int i = 0; i < n; i++){
if(A[i] >= maxLeft){
maxLeft = A[i];
}else{
start = i;
}
}
if(start == 0){
return 0;
}
//从右到左求无序时最左的位置
for(int i = n - 2; i >= 0; i--){
if(A[i] <= minRight){
minRight = A[i];
}else{
end = i;
}
}
return start - end + 1;
}
}
public static void sort(char[] s){
char[] temp = s;
int count = 0;
int minIndex = -1,mMaxIndex = -1;
boolean target = false;
for(int i=0;i<temp.length;i++){
for(int j=i+1;j<temp.length;j++){
char c = temp[i];
char c1 = temp[j];
if(c > c1){
target = true;
break;
}
}
if(target){
minIndex = i;
break;
}
}
target = false;
for(int i= temp.length-1;i>=0;i--){
for(int j=i-1;j>=0;j--){
char c = temp[i];
char c1 = temp[j];
if(c < c1){
target = true;
break;
}
}
if(target){
mMaxIndex = i;
break;
}
}
count = minIndex==-1?0: mMaxIndex-minIndex+1;
System.out.println("count:"+count);
}
public static int getMinSortLength(int[] arr) {
if(arr.length==0){
return 0;
}
int max=arr[0];
int min=arr[0];
for(int i=1;i<arr.length;i++){
if(max<arr[i]){
max=arr[i];
}
if(min>arr[i]){
min=arr[i];
}
}
if(min!=arr[0]&&max!=arr[arr.length-1]){
return arr.length;
}else{
if(min==arr[0]){
int[] newarr=new int[arr.length-1];
for(int i=1;i<arr.length;i++){
newarr[i-1]=arr[i];
}
return getMinSortLength(newarr);
}else{
int[] newarr=new int[arr.length-1];
for(int i=0;i<arr.length-1;i++){
newarr[i]=arr[i];
}
return getMinSortLength(newarr);
}
}
}
public class Solution {
private byte[] recArr;
public int getMinSortLength(int[] arr) {
int maxLength = 0;
int recPoint = 0;
if(arr.length == 0)
return maxLength;
recArr = new byte[arr.length];
for(int i = 1;i < arr.length; ++i)
for(int j = i;j > 0; --j)
if(arr[j - 1] > arr[j]){
recArr[i] = 1;
recArr[j - 1] = 1;
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
else
break;
maxLength = recArr[0];
for(int i = 1;i < recArr.length; ++i){
if(recArr[i] > 0)
recArr[i] = (byte) (recArr[i] + recArr[i - 1]);
if(recArr[i] > maxLength)
maxLength = recArr[i];
}
return maxLength;
}
}
public int getLen(int[]
arr){
//数组的复制
int [] arrSort = Arrays.copyOf(arr,
arr.length);
Arrays.sort(arrSort);
int i = getMin(int[]
arr, int []arrSort);
int j = getMax(int[] arr, int
[]arrSort);
return j==0?0:(j-i+1);
}
private int
getMin(int[] arr1, int[] arr2){
int i;
for(i = 0; i
< arr1.length(); i ++){
if(arr1[i] == arr2[i]){
continue;
}else{
return i;
}
}
return arr1.length();
}
private
int getMax(int[] arr1, int[] arr2){
int j;
for(j =
arr1.length(); j>=0; j--){
if(arr1[j]==arr2[j]){
continue;
}else{
return j;
}
}
return 0;
}
int getMinSortLength(vector<int> arr, int len) { if(len == 0) return 0; int a = 1; while(a < len && arr[a] >= arr[a - 1]) ++a; if(a == len) return 0; int mi = 0x7fffffff; for(int i = a; i < len; ++i)if(arr[i] < mi) mi = arr[i]; while(a > 0 && arr[a - 1] > mi) --a; int b = len - 1; while(b > 0 && arr[b - 1] <= arr[b]) --b; int mx = 0x80000000; for(int i = 0; i < b; ++i)if(arr[i] > mx) mx = arr[i]; while(b < len && arr[b] < mx) ++b; return b - a; }