1. 正向反向最长上升子序列。
  2. 就可以知道以自己为主的序列长度。
  3. 分别迭代以自己为中心得队列长度,找到那个最大的。
  4. 结果就是最小要退出得。
  5. 注意:一些常见得算法,在笔试中经常在赋予每个步骤意义。
#include<bits/stdc++.h>
using namespace std;

int main(){
    int N;

    while(cin>>N){
        vector<int> singers;
        for(int i =0; i< N; i++){
            int sin;
            cin>>sin;
            singers.push_back(sin);
        }

        //最长上升子序列
        vector<int> numL(N,1);
        vector<int> numR(N,1);


        for(int i = 1; i< N;i++){
            for(int j = 0; j< i;j++){
                if(singers[j]<singers[i]&& numL[i] < numL[j]+1){
                    numL[i] = numL[j] + 1; 
                }
            }
        }

        for(int i = N-2; i >= 0;i--){
            for(int j = N-1; j > i;j--){
                if(singers[j]<singers[i]&& numR[i] < numR[j]+1){
                    numR[i] = numR[j] + 1; 
                }
            }
        }


        vector<int> res;
        for(int i = 0; i< N; i++){
            res.push_back(numR[i]+numL[i]-1);
        }

        int max_ = 1;

        for(int i =0; i< N;i++){
            if(res[i]>max_){
                max_ = res[i];
            }
        }


        cout<< N- max_<<endl;


    }


    return 0;
}