记录编号 321761 评测结果 AAAAAAAAAAA
题目名称 [USACO Feb08] 麻烦的聚餐 最终得分 100
用户昵称 GravatarGo灬Fire 是否通过 通过
代码语言 C++ 运行时间 0.007 s
提交时间 2016-10-13 21:32:11 内存使用 0.65 MiB
显示代码纯文本
/*
	Name: 麻烦的聚餐 
	Copyright: 
	From:http://cogs.pro/cogs/problem/problem.php?pid=139 
	Author: Go灬Fire 
	Date: 13/10/16 21:31
	Description: 找最长不上升子序列与最长不下降子序列中长度较大的一个,
	            用序列总长-它既是答案
				不能用循环,由于x只可能是1 2 3 ,记录last[]数组,防T掉 
*/
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#define Begin freopen("egroup.in","r",stdin);freopen("egroup.out","w",stdout);
#define End fclose(stdin);fclose(stdout);
using namespace std;
const int maxn=35000;
int n,f[maxn],rf[maxn],last[maxn];
void Init();

int main(){
    Begin;
    Init();
    //system("pause");
    End;
    return 0;
}
void Init(){
	scanf("%d",&n);
	int ans=0;
	for(int i=1;i<=n;i++){
		int x;scanf("%d",&x);
		for(int j=1;j<=x;j++){
			if(f[i]<f[last[j]]+1)f[i]=f[last[j]]+1;
		}
		for(int j=x;j<=3;j++){
			if(rf[i]<rf[last[j]]+1)rf[i]=rf[last[j]]+1;
		}
		ans=max(ans,max(f[i],rf[i]));
		last[x]=i;
	}
	printf("%d\n",n-ans);
}