NN位同学站成一排,音乐老师要请其中的(N−KN−K)位同学出列,使得剩下的KK位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他们的身高分别为T1,T2,…,TKT1,T2,…,TK, 则他们的身高满足T1<...
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
共二行。
第一行是一个整数N(2≤N≤100)N(2≤N≤100),表示同学的总数。
第二行有nn个整数,用空格分隔,第ii个整数Ti(130≤Ti≤230)Ti(130≤Ti≤230)是第ii位同学的身高(厘米)。
一个整数,最少需要几位同学出列。
输入 #1复制
8 186 186 150 200 160 130 197 220
输出 #1复制
4
对于50%的数据,保证有n≤20n≤20;
对于全部的数据,保证有n≤100n≤100。
#include
using namespace std;
int value[100001];
int main(){
ios::sync_with_stdio(0);
int a[100005],b[100005],c[100005],d[100005],n=0,len=1,len2=1;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
b[len]=a[1];
c[len2]=a[n];
for(int i=1;i<=n;i++){
if(a[i]>b[len])b[++len]=a[i];
else {
int p = lower_bound(b+1, b+len+1, a[i])-b;
b[p]=a[i];
}
d[i]+=len;
}
for(int i=n;i>=1;i--){
if(a[i]>c[len2])c[++len2]=a[i];
else {
int p = lower_bound(c+1, c+len2+1, a[i])-c;
c[p]=a[i];
}
d[i]+=len2;
d[i]--;
}
int mmax=d[1];
for(int i=2;i<=n;i++)
if(d[i]>mmax)mmax=d[i];
cout<