- 正向反向最长上升子序列。
- 就可以知道以自己为主的序列长度。
- 分别迭代以自己为中心得队列长度,找到那个最大的。
- 结果就是最小要退出得。
- 注意:一些常见得算法,在笔试中经常在赋予每个步骤意义。
#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;
}