CodeForces 606C

车辆排序
CodeForces 606C

Description

一个无限长的铁路有一个载着n辆车的火车,每一辆车的编号从1到n。每一辆车的编号都是不同的。他们的顺序是无序的。

David Blaine想要将这些车按照他们的编号从小到大排序,他可以做两种操作。第一种,他可以将一辆车从任意位置移动到所有车的第一位。第二种,他可以将一辆车从任意位置移动到所有车的最后一位。

不过他很懒,所以他想知道将这些车排好序最少做几次操作就可以。      

Input

第一行输入包含一个整数n (1 ≤ n ≤ 100 000) -- 车的数目

第二行包含n个整数 pi (1 ≤ pi ≤ npi ≠ pj if i ≠ j) - 车的编号的初始序列      

Output

输出一个整数 - 将车辆排好序的最小操作次数

Sample Input

5
4 1 2 5 3
 
4
4 1 3 2
 

Sample Output

2

2

Hint

在第一个样例中,将编号为4的车放到最后,然后把编号为5的车放到最后就可以了。总共是2次操作。


题意:
给出一个序列, 任一个数可以放到序列末尾或者最前, 输出最小操作数 
思路:
求最长连续上升长度ans,n-ans即为答案


#include <stdio.h>
#include <string.h>
int jl[100005];
int main()
{
	int n, ans, k;
	while(~scanf("%d", &n))
	{
		ans = 0;
		memset(jl, 0, sizeof jl);
		for(int i = 1; i <= n; ++i)
		{
			scanf("%d", &k);
			if(jl[k-1])
			{
				jl[k] = jl[k-1]+1;
			}
			else jl[k] = 1;
			ans = ans < jl[k]? jl[k]: ans;
		}
		printf("%d\n", n-ans);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值