Description

为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐。每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的位置就归第2批就餐的奶牛了。由于奶牛们不理解FJ的安排,晚饭前的排队成了一个大麻烦。 第i头奶牛有一张标明她用餐批次D_i(1 <= D_i <= 3)的卡片。虽然所有N(1 <= N <= 30,000)头奶牛排成了很整齐的队伍但谁都看得出来,卡片上的号码是完全杂乱无章的。 在若干次混乱的重新排队后,FJ找到了一种简单些的方法:奶牛们不动,他沿着队伍从头到尾走一遍把那些他认为排错队的奶牛卡片上的编号改掉,最终得到一个他想要的每个组中的奶牛都站在一起的队列,例如111222333或者333222111。哦,你也发现了,FJ不反对一条前后颠倒的队列,那样他可以让所有奶牛向后转,然后按正常顺序进入餐厅。 你也晓得,FJ是个很懒的人。他想知道,如果他想达到目的,那么他最少得改多少头奶牛卡片上的编号。所有奶牛在FJ改卡片编号的时候,都不会挪位置。

Input

第1行: 1个整数:N 第2..N+1行: 第i+1行是1个整数,为第i头奶牛的用餐批次D_i

Output

第1行: 输出1个整数,为FJ最少要改几头奶牛卡片上的编号,才能让编号变成他设想中的样子

Sample Input

5

1

3

2

1

1

**输入说明: **

队列中共有5头奶牛,第1头以及最后2头奶牛被设定为第一批用餐,第2头奶牛的预设是第三批用餐,第3头则为第二批用餐。

Sample Output

1

**输出说明: **

如果FJ想把当前队列改成一个不下降序列,他至少要改2头奶牛的编号,一种可行的方案是:把队伍中2头编号不是1的奶牛的编号都改成1。不过,如果FJ选择把第1头奶牛的编号改成3就能把奶牛们的队伍改造成一个合法的不上升序列了。


跑一遍最长上升子序列和最长下降子序列,然后输出n-ans即可

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
return x*f;
}
inline void print(int x){
if (x>=10) print(x/10);
putchar(x%10+'0');
}
const int N=3e4;
int val[N+10],f[N+10];
int main(){
int n=read(),ans=0;
for (int i=1;i<=n;i++) val[i]=read(); for (int i=1;i<=n;i++) f[i]=1;
for (int i=1;i<n;i++) for (int j=i+1;j<=n;j++) if (val[j]>=val[i]) f[j]=max(f[j],f[i]+1);
for (int i=1;i<=n;i++) ans=max(ans,f[i]);
//最长上升子序列
for (int i=1;i<=n;i++) f[i]=1;
for (int i=1;i<n;i++) for (int j=i+1;j<=n;j++) if (val[j]<=val[i]) f[j]=max(f[j],f[i]+1);
for (int i=1;i<=n;i++) ans=max(ans,f[i]);
//最长下降子序列
printf("%d\n",n-ans);
return 0;
}

最新文章

  1. [JS]笔记14之事件委托
  2. LTS
  3. 在MacOS和iOS系统中使用OpenCV
  4. 04SpringMvc_映射器_BeanNameUrlHanderMapping
  5. (WF)
  6. mvc从xheditor编辑器中获取内容时存在潜在危险
  7. Agile.Net 组件式开发平台 - 数据访问组件
  8. Cummins INSITE locked and ask for verification code
  9. Storm系列(十七)DRPC介绍
  10. [BZOJ 1086] [SCOI2005] 王室联邦 【树分块】
  11. java批量转换图片格式
  12. ASP.NET打印EXCEl报表技术总结
  13. ubuntu菜单面板丢了怎么找回
  14. smartcn与IKanalyzer
  15. 世界之窗(TheWorld)浏览器 3.6.1.0 简体中文绿色版
  16. react基于nodejs简单的搭建与开发方法
  17. 排序算法Java实现(选择排序)
  18. Linux学习之CentOS(十三)-----磁盘管理之 磁盘与目录的容量(转) df 与du 命令
  19. 学习笔记之Docker
  20. 字符串copy推导演变

热门文章

  1. Python开发的一个IDE推荐,Sublime Text 3
  2. paramiko连接sshd使用的hostkey
  3. OpenLayers3基础教程——OL3基本概念
  4. 一起talk C栗子吧(第一百二十一回:C语言实例--线程知识体系图)
  5. convnet源代码解析(一):基础准备
  6. Ubuntu16.04下安装Tensorflow CPU版本(图文详解)
  7. 计算机体系结构的铁律(iron law)
  8. vmware10上安装mac os 10.9
  9. linux中用anaconda使用不同版本python
  10. Educational Codeforces Round 18 C. Divide by Three DP